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 に答える