2011-01-20 5 views
5

Dopo aver letto la discussione sull'operatore < per std :: weak_ptr, non vedo alcun motivo per cui la definizione di std :: hash per utilizzare il blocco di controllo per std :: weak_ptr non funzionerebbe. Inoltre, non posso credere che questo sia stato ignorato dal comitato degli standard. Qualcuno ha letto la discussione pertinente sull'argomento?Perché std :: hash non è stato definito per std :: weak_ptr in C++ 0x?

Edit: Discussione sul operatore < per std :: weak_ptr http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1590.html

risposta

3

Sono certa familiarità con la storia. C'è un altro documento in seguito si dovrebbe leggere anche:

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

e credo che questo documento in seguito è quello che è in realtà nel progetto corrente. In sintesi, shared_ptr ha un operatore basato sul valore <() e funzioni membro basate sulla proprietà owner_before. weak_ptr ha solo il secondo.

La mia ipotesi migliore è che il supporto hash per weak_ptr sia stato semplicemente rilasciato. Nessuno ha proposto il supporto hash per weak_ptr in base alle mie conoscenze. Ci sono stati molti, molti problemi nel portare C++ 0x alla standardizzazione, una quantità limitata di tempo e risorse per risolvere i problemi, e senza dubbio ci saranno errori e pezzi mancanti.

Penso anche di aggiungere il supporto hash per weak_ptr che dovrebbe essere fatto in modo analogo a owner_before: Aggiungi la funzione membro owner_hash a shared_ptr e weak_ptr. Sospetto che sia troppo tardi per farlo per C++ 0x, ma questa sembra una proposta TR2 plausibile.

+0

Si scopre che il Giappone ha effettivamente segnalato questo. – SamB

2

Si scopre che il Giappone si è lamentato di questo (vedere lwg issue 1406) e che esattamente quello che suggerisce Howard in his answer è stato proposto come risoluzione. Purtroppo, è stato posticipato (presumibilmente a causa di vincoli temporali).