我想写一些东西来分享记忆, pAttr是共享内存地址。
模板功能如下, 但它没有通过编译。
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类型指针? 谁能帮助我? 非常感谢。
答案 0 :(得分:3)
正如您的代码现在所读,T
是一个变量,而不是一个类型。大概你的意思是:
typedef typename Container::mapped_type T;
T * pElem = static_cast<T *>(pAttr);
答案 1 :(得分:1)
您也可以这样做
template <typename KeyType, typename ValueType>
int ShareMemMgn::writeContainerToShareMemMap(void* pAttr, std::map<KeyType,ValueType>& oData)
如果您只使用地图。