Hay un problema con la conversión booleana. Permite sintaxis que casi siempre son un dolor.
Hay, afortunadamente, una solución: el idioma Safe Bool.
El problema con una conversión a bool
es que la conversión implícita es peligrosa.
std::auto_ptr<T> p = ..., q = ....;
if (p < q) // uh ?
Por lo tanto, operator bool() const
es una abominación. O bien, proporciona un método explícito ... o usa la expresión idiomática de bool seguro.
La idea del modismo es darte una instancia de un tipo con un subconjunto de operaciones bastante mínimo y casi ningún caso en el que la conversión implícita te meta en problemas. Esto se hace usando un puntero a la función miembro.
Las operaciones como if (p)
y if (!p)
tienen sentido, pero if (p < q)
no se compilará.
Lea atentamente el enlace para ver la solución completa, y se dará cuenta de por qué fue una buena idea no tener operator bool() const
.
La pregunta http://stackoverflow.com/q/2953530/427532 está relacionada de alguna manera. –