如何在tbb :: concurrent_unordered_map中使用weak_ptr?

时间:2017-12-28 03:28:26

标签: c++ tbb weak-ptr

我正在使用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 /包含/ TBB /内部/ _tbb_hash_compare_impl.h:66:37:   错误:类型&#39; const中的static_cast无效   的std :: weak_ptr的&#39;输入&#39; std :: size_t
  {aka long unsigned int}&#39;
  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 个答案:

答案 0 :(得分:0)

您需要为std::weak_ptr定义哈希函数。您可以在TBB库的测试中找到the example