Je veux savoir si je peux écrire dans un fichier (mémoire partagée avec boost) un char *. J'ai créé un Template, et fonctionne bien avec "int" et "string", mais avec char *, je peux y accéder en mémoire, quand j'exécute le programme, mais les données ne sont pas stockées dans le fichier après, comme cela arrive avec des ints et des cordes.copie char * dans la mémoire partagée boost
La pièce représentative du code serait: (T serait char *)
//DECLARATIONS
MyMap *mymap;
managed_mapped_file seg = managed_mapped_file(open_or_create, tableName, tablesize);
mymap = seg->find_or_construct<MyMap>("MyMap") //object name
(std::less<T>() //first constructor parameter
,*alloc_inst); //second constructor parameter
//THE METHOD TO ADD THE ENTRIES
template<class T>
void ShareDB<T>::add_ref_info_to_db (const T &Symbol_Index , const std::string &a_info){
MyMap::iterator res = mymap->find(Symbol_Index);
mymap->insert(std::pair<const T, shared_string>(Symbol_Index, localSymbol));
je donne la parole au modèle comme ça:
ShareDB <char *> ex;
ex.openDB(dataBaseName,"TestMutex", 196608, true);
ex.add_ref_info_to_db (a,ex.RefInfoRecord);
Peut-être qu'il est juste que je peux ne pas écrire des pointeurs ... Je ne suis pas sûr ...
Merci à l'avance
Vous utilisez une carte avec un pointeur comme clé, cela n'a pas de sens. Plutôt que 'char *' comme clé, utilisez 'std :: string' comme clé de votre map. Aussi, sans voir ce que fait votre fonction 'MyMap :: insert()' avec le 'char *' il est difficile de dire ce qui ne va pas ... – Nim
Je suis d'accord avec Nim plus de code pertinent aiderait, la définition de insert() , le code qui écrit réellement la valeur, toute copie ou assignation de Symbol_Index, etc. – AJG85