C'è un problema con la conversione booleana. Permette sintassi che sono quasi sempre un dolore.
C'è, fortunatamente, una soluzione: l'idioma Safe Bool.
Il problema con una conversione in bool
è che la conversione implicita è pericolosa.
std::auto_ptr<T> p = ..., q = ....;
if (p < q) // uh ?
Pertanto, operator bool() const
è un abominio. O fornite un metodo esplicito ... o usate l'idioma di bool sicuro.
L'idea dell'idioma è di darti un'istanza di un tipo con un sottoinsieme di operazioni piuttosto minime e quasi nessun caso in cui la conversione implicita ti metterà nei guai. Questo viene fatto usando un puntatore alla funzione membro.
Operazioni come if (p)
e if (!p)
hanno senso, ma non sarà possibile compilare lo if (p < q)
.
Leggere attentamente il collegamento per la soluzione completa e capirete perché è stata una buona idea non avere operator bool() const
.
fonte
2010-06-30 17:24:27
La domanda http://stackoverflow.com/q/2953530/427532 è in qualche modo correlata. –