2011-01-20 4 views
5

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

Edit: Обсуждение оператора < для станд :: weak_ptr http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1590.html

ответ

3

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

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

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

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

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

+0

Получается, что Япония действительно сообщила об этом. – SamB

2

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