как получить указатель типа карты в C ++, карта

Я хочу написать что-то, чтобы поделиться памятью,
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;
}

Как получить указатель отображаемого типа?
Кто-нибудь может мне помочь?
Большое спасибо.

0

Решение

Вы также можете сделать это

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

Если вы используете только карту.

1

Другие решения

Как ваш код читает прямо сейчас, T это переменная, а не тип. Предположительно, вы имели в виду это:

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector