2011-01-20 11 views
5

Después de leer la discusión en el operador < para std :: weak_ptr, no veo ninguna razón por la cual definir std :: hash para usar el bloque de control para std :: weak_ptr no funcionaría. Tampoco puedo creer que esto haya sido ignorado por el comité de estándares. ¿Alguien ha leído la discusión relevante sobre el tema?¿Por qué std :: hash no se definió para std :: weak_ptr en C++ 0x?

Editar: Discusión sobre el operador < para std :: weak_ptr http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1590.html

Respuesta

3

estoy un poco familiarizado con la historia. Hay otro artículo posterior también debe leer:

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

y creo que este trabajo posterior es lo que es en realidad en el proyecto actual. En resumen, shared_ptr tiene el operador basado en el valor <() y funciones de miembro basadas en la propiedad owner_before. weak_ptr tiene solo el último.

Mi mejor estimación es que el hash-support para weak_ptr simplemente se eliminó. Nadie ha propuesto el soporte hash para weak_ptr según mi leal saber y entender. Ha habido muchos, muchos problemas al llevar C++ 0x a la estandarización, una cantidad limitada de tiempo y recursos para resolver los problemas, y sin duda habrá errores y piezas faltantes.

También creo que para agregar el soporte hash para weak_ptr tendría que hacerse de forma análoga a owner_before: Agregar la función member owner_hash a shared_ptr y weak_ptr. Sospecho que es demasiado tarde para hacer esto con C++ 0x, pero parece una propuesta TR2 plausible.

+0

Resulta que Japón realmente informó esto. – SamB

2

Resulta que Japón se quejó de esto (ver lwg issue 1406), y que exactamente lo que Howard sugiere en his answer se propuso como la resolución. Lamentablemente, se pospuso (presumiblemente debido a limitaciones de tiempo).

Cuestiones relacionadas