【发布时间】:2011-02-01 18:16:40
【问题描述】:
我想知道我是否可以在文件(通过 boost 共享内存)中写入 char*。我已经创建了一个模板,并且可以很好地使用“int”和“string”,但是使用 char*,当我执行程序时,我可以在内存中访问它们,但是数据不会像发生的那样存储在文件中带有整数和字符串。
代码的代表性部分是:(T 是 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));
所以我这样调用模板:
ShareDB <char *> ex;
ex.openDB(dataBaseName,"TestMutex", 196608, true);
ex.add_ref_info_to_db (a,ex.RefInfoRecord);
也许只是我不会写指针……我不确定……
提前致谢
【问题讨论】:
-
您正在使用以指针为键的地图,这没有意义。不要将
char*作为键,而是使用std::string作为地图的键。此外,如果没有看到您的MyMap::insert()函数对char*的作用,很难判断出了什么问题...... -
我同意 Nim 更相关的代码会有所帮助,insert() 的定义、实际写入值的代码、Symbol_Index 的任何复制或分配等
标签: c++ boost shared-memory