Как использовать слабый_птр в tbb::concurrent_unordered_map?
Я использую tbb::concurrent_unordered_map
заменить std::map
в моей программе так:
Before:
class KvSubTable;
typedef std::weak_ptr<KvSubTable> KvSubTableId;
std::map<KvSubTableId, int, std::owner_less<KvSubTableId> > mEntryMap;
Теперь я использую tbb::concurrent_unordered_map
заменить std::map
, но есть некоторые ошибки компиляции:
tbb::concurrent_unordered_map<KvSubTableId, int, tbb::tbb_hash<KvSubTableId>, std::owner_less<KvSubTableId> > mEntryMap;
cpp / ext / amd64 / include / tbb / internal / _tbb_hash_compare_impl.h: 66: 37: ошибка: недопустимый static_cast для типа 'const std::weak_ptr' для типа 'std:: size_t
{aka long unsigned int} '
return static_cast (t) * internal:: hash_multiplier;
Я пробовал некоторые решения, как это, но это не работает:
template <typename T>
inline bool operator==(const std::weak_ptr<T>& t, const std::weak_ptr<T>& u)
{
return !t.owner_before(u) && !u.owner_before(t);
}
Итак, как это может работать, пожалуйста, помогите....
1 ответ
Вам нужно определить хеш-функцию для std::weak_ptr
, Вы можете найти пример в тестах для библиотеки TBB.