【问题标题】:copy char* in shared memory boost在共享内存提升中复制 char*
【发布时间】: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


【解决方案1】:

考虑template&lt;typename T&gt; 而不是template&lt;class T&gt; ...但是我会简单地使用std::string,除非你必须特别支持char *

【讨论】:

  • 我必须支持char ...唯一的问题是它似乎最后没有将char写入内存,其余的行为都很好...有什么建议吗?
  • 您是否尝试将模板更改为使用 typename?虽然通常它们在某些使用 typename 的编译器中是相同的,但它们更适用于非用户定义对象的整数类型,例如 int、double、char ... 你有任何输出吗?除了所需字符之外的意外输出可能是实际发生情况的线索。
猜你喜欢
  • 2015-10-29
  • 1970-01-01
  • 2015-09-25
  • 2012-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
相关资源
最近更新 更多