【问题标题】:Why was std::hash not defined for std::weak_ptr in C++0x?为什么在 C++0x 中没有为 std::weak_ptr 定义 std::hash?
【发布时间】:2011-01-20 17:34:18
【问题描述】:

在阅读了关于 std::weak_ptr 的 operator

编辑:关于 std::weak_ptr 的 operatorhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1590.html

【问题讨论】:

    标签: c++11 hash weak-ptr stdhash


    【解决方案1】:

    我对历史有点熟悉。您还应该阅读另一篇以后的论文:

    http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2637.pdf

    而且我相信这篇后来的论文实际上就是当前草案中的内容。总之,shared_ptr 有基于值的操作符和基于所有权的成员函数 owner_before。 weak_ptr 只有后者。

    我最好的猜测是,对weak_ptr 的哈希支持只是被删除了。据我所知,没有人提议对 weak_ptr 进行哈希支持。在将 C++0x 引入标准化方面存在很多很多问题,解决这些问题的时间和资源有限,毫无疑问会出现错误和遗漏的部分。

    我还认为要为weak_ptr 添加哈希支持,它必须类似于owner_before:将成员函数owner_hash 添加到shared_ptr 和weak_ptr。我怀疑为 C++0x 做这件事为时已晚,但这似乎是一个合理的 TR2 提议。

    【讨论】:

    • 原来日本居然报道了这件事。
    • 所以......我们这些需要散列弱指针的人,并且懒得弄清楚......我们应该写什么代码?
    • 我认为没有办法将这个函数作为客户端编写,如上所述 owner_hash。客户端根本无法访问需要散列的字段。这只能由 std::lib 实现者提供。我不知道客户如何为weak_ptr 编写不易出错的哈希函数。也许别人有个好主意……
    【解决方案2】:

    事实证明,日本对此提出了抱怨(请参阅 lwg issue 1406),而正是霍华德在 his answer 中建议的内容被提议作为决议。不幸的是,它被推迟了(大概是因为时间限制)。

    【讨论】:

      猜你喜欢
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 2021-12-31
      • 1970-01-01
      • 2019-03-28
      相关资源
      最近更新 更多