0

我想写点东西来共享内存,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;
}

如何获取映射类型指针?有人可以帮我吗?非常感谢。

4

2 回答 2

3

正如您的代码现在所读的那样,T它是一个变量,而不是一个类型。大概你的意思是:

typedef typename Container::mapped_type T;
T * pElem = static_cast<T *>(pAttr);
于 2012-11-19T05:02:10.377 回答
1

你也可以这样做

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

如果您只使用地图。

于 2012-11-19T05:04:26.663 回答