【发布时间】:2022-01-04 22:21:30
【问题描述】:
所以我有使用std::weak_ptr 并将它们维护在std::set 中的代码,并且工作得很好——并且已经工作了5 或7 年。最近我想我会在std::unordered_set(嗯,实际上是在f14::F14ValueSet)中使用它们,为此,我需要一个哈希值。目前还没有std::hash<std::weak_ptr>,那我该怎么办呢?
答案似乎是“只是散列控制块”,正如这个问题和回复所暗示的那样:Why was std::hash not defined for std::weak_ptr in C++0x?,但是我如何访问控制块?在 glibc 中,它位于 __weak_ptr<>::_M_refcount._M_pi-> 但这是私有的(并且是特定于实现的)。我还能做什么?
一个答案是“等一下”:maybe someday there will be a standard owner_hash() for std::weak_ptr,但我更喜欢现在可用的东西。
【问题讨论】:
-
看起来如果你不想等待,你需要实现你自己的弱指针类型,暴露适当的数据来做一个稳定的哈希。
-
嗯,stackoverflow.com/questions/13695640/… 中给出的答案显然是错误的,因为它与 C++ 标准委员会对此事的看法相冲突。它似乎只是“你做不到”是正确的,但解释原因是错误的。应该撤回或修改该答案。