2011-04-29 9 views
5

Estoy definiendo una clase ReturnValue en C++ que necesita informar si un método fue exitoso. Quiero que los objetos de la clase evalúen a true en caso de éxito y false en caso de error. ¿Qué operador anulo para controlar la veracidad de mi clase?¿Cómo anulo el operador de bool en una clase de C++?

+3

Antes de hacer esto, tenga en cuenta los peligros de implementar 'operator bool': consulte http://www.devx.com/cplus/10MinuteSolution/32145/1954 – hrnt

Respuesta

11

La respuesta simple es proveer operator bool() const, pero es posible que desee ver en la safe bool idiom, donde en lugar de convertir bool (que a su vez podría convertirse implícitamente en otros tipos integrales) puede convertir a un tipo diferente (puntero a una función miembro de un tipo privado) que no aceptará esas conversiones.

+18

Y si utiliza los últimos compiladores, puede usar la nueva característica de C++ 0x 'operador explícito bool()' para evitar las conversiones implícitas. –

+0

¡Muy bonito! Probablemente vaya con el sencillo 'operator bool() const' en mi caso de uso actual, solo por simplicidad, pero la expresión bool segura parece mucho más adecuada para el código de producción real. Es un poco triste que C++ te obligue a la locura de esta manera. : -/ –

+0

@Bo, por suerte, ya que este es un proyecto personal, puedo elegir mi compilador, y GCC 4.5 lo admite. ¡Gracias! –

8

Bueno, se podría sobrecargar operator bool():

class ReturnValue 
{ 
    operator bool() const 
    { 
     return true; // Or false! 
    } 
}; 
3

sobrecarga de este operador:

operator bool(); 
Cuestiones relacionadas