Sie können Ihr Objekt in einen booleschen Wert umwandeln, indem operator bool()
definieren:
explicit operator bool() const
{
return foo.getX();
}
Das explicit
Schlüsselwort verhindert implizite Konvertierungen von Foo
zu bool
. Wenn Sie beispielsweise foo
versehentlich in einen arithmetischen Ausdruck wie foo + 1
eingeben, könnte der Compiler diesen Fehler erkennen, wenn Sie operator bool()
als explicit
deklarieren, andernfalls wird foo
in bool
konvertiert, auch wenn dies nicht beabsichtigt ist.
Im Allgemeinen, Elementfunktionen der Form
operator TypeName()
(mit optionalen explicit
und const
Qualifier) sind Umwandlungsoperator. Sie können Ihre Klasse auf einen beliebigen Typ umwandeln, der von TypeName
angegeben wird. In der anderen Richtung, Konstrukteure mit einem Argument können Sie jede Art Ihrer Klasse werfen:
class Foo {
Foo(int x); // convert int to Foo
operator bool() const; // convert Foo to bool
int x;
};
Diese implizite Conversions für Ihre Klasse definiert. Der Compiler versucht diese Konvertierungen wenn möglich zu übernehmen (wie bei eingebauten Datentypen, z. B. 5 + 1.0
). Sie können sie als explicit
deklarieren, um unerwünschte implizite Konvertierungen zu unterdrücken.
Wenn Sie dies in einer C++ 03 Kontext benötigen, können Sie in den sicheren Bool Idiom aussehen: http://www.artima.com/cppsource/safebool .html – Yuushi