2011-02-01 42 views
0

我想知道我是否可以在文件(帶有boost的共享內存)中寫入char *。我創建了一個模板,並且對「int」和「string」工作正常,但使用char *時,我可以在內存中訪問它們,當我執行程序時,數據不會像以前那樣存儲在文件中與整數和字符串。複製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); 

也許這是我能不寫指針...我不確定...

在此先感謝

+0

您正在使用一個指針作爲關鍵的地圖,這是沒有意義的。而不是`char *`作爲鍵,使用`std :: string`作爲你的地圖的鍵。此外,沒有看到你的`MyMap :: insert()`函數用`char *`做了什麼,很難說出什麼問題...... – Nim 2011-02-01 18:46:36

+0

我同意Nim更相關的代碼會有所幫助,insert() ,實際寫入值的代碼,Symbol_Index的任何複製或賦值等。 – AJG85 2011-02-01 19:56:32

回答

1

而不是template<class T>考慮template<typename T> ...但是我會簡單地使用std::string,除非您必須特別支持char *