2012-11-19 34 views
0

我想寫的東西共享內存, pAttr是共享內存地址。如何讓C++中的地圖類型的指針,地圖

如下面的模板功能, 但它不通過編譯。

template <typename Container> 
int ShareMemMgn::writeContainerToShareMemMap(void* pAttr, Container& oData) 
{ 
    typename Container::mapped_type T; 
    (T*)(pElem) = (T *)(pAttr); //compile errror 
/* 
share_mem_mgn.cpp:545: error: expected primary-expression before ‘)’ token 
share_mem_mgn.cpp:545: error: ‘pElem’ was not declared in this scope 
share_mem_mgn.cpp:545: error: expected primary-expression before ‘)’ token 

*/ 


    for(typename Container::iterator it = oData.begin(); 
     it != oData.end(); ++it) 
    { 
     memcpy(pElem, (&(it->second)), sizeof(typename Container::mapped_type)); 
     ++pElem; 
    } 

    return 0; 
} 

如何獲取maped類型指針? 任何人都可以幫助我嗎? 非常感謝。

回答

1

你也可以如果你只使用一個地圖做

template <typename KeyType, typename ValueType> 
int ShareMemMgn::writeContainerToShareMemMap(void* pAttr, std::map<KeyType,ValueType>& oData) 

+0

是啊,我要改變我的函數原型爲你的建議,我會不會得到任何建議。對我好,謝謝。 – lear

3

當你的代碼,現在讀,T是一個變量,而不是一個類型。想必你的意思是這樣的:

typedef typename Container::mapped_type T; 
T * pElem = static_cast<T *>(pAttr); 
+0

感謝,它的工作原理。但不是static_cast原因。 (T *)(pElem)是不對的,如果我改成 「T * pElem」,它傳遞。非常感謝,cdhowie! – lear

+0

@lear正確;我解決了這兩個問題。你不應該在C++中使用C風格的強制轉換,所以我也更正了強制轉換運算符。 – cdhowie