Почему std :: hash не определен для std :: weak_ptr в C ++ 0x? - PullRequest
5 голосов
/ 20 января 2011

После прочтения обсуждения оператора <для std :: weak_ptr я не вижу причин, по которым определение std :: hash для использования блока управления для std :: weak_ptr не будет работать.Я также не могу поверить, что это было проигнорировано комитетом по стандартам.Кто-нибудь читал соответствующую дискуссию на эту тему? </p>

Редактировать: Обсуждение оператора <для std :: weak_ptr <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1590.html" rel="nofollow">http://www.open -std.org / jtc1 / sc22 / wg21 / docs /apers / 2004 /n1590.html

Ответы [ 2 ]

3 голосов
/ 23 января 2011

Я немного знаком с историей. Есть еще одна статья, которую вы должны прочитать:

http://www.open -std.org / ОТК1 / SC22 / wg21 / документы / документы / 2008 / n2637.pdf

И я полагаю, что этот более поздний документ является тем, что на самом деле находится в текущем проекте. Таким образом, shared_ptr имеет операторы на основе значений <() <em>и функции-члены на основе владения owner_before. Слабый_птр имеет только последнее.

Мое лучшее предположение заключается в том, что хэш-поддержка для weak_ptr просто упала. Насколько мне известно, никто не предлагал поддержку хеш-функции для weak_ptr. Было много, много проблем при приведении C ++ 0x к стандартизации, ограниченное количество времени и ресурсов для решения проблем, и, без сомнения, будут ошибки и упущения.

Я также думаю, что для добавления поддержки хеш-функции для weak_ptr это должно быть сделано аналогично owner_before: добавьте функцию-член owner_hash как к shared_ptr, так и weak_ptr. Я подозреваю, что уже слишком поздно делать это для C ++ 0x, но это кажется правдоподобным предложением TR2.

2 голосов
/ 14 января 2014

Оказывается, что Япония жаловалась на это (см. выпуск 1406 ), и что именно то, что Говард предлагает в его ответ , было предложено в качестве резолюции.К сожалению, это было отложено (предположительно из-за нехватки времени).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...