można przekonwertować obiekt do wartości logicznej poprzez zdefiniowanie operator bool()
:
explicit operator bool() const
{
return foo.getX();
}
explicit
kluczowe zapobiega niejawne konwersje z Foo
do bool
. Na przykład, jeśli przypadkowo umieścisz foo
w wyrażeniu arytmetycznym, takim jak foo + 1
, kompilator może wykryć ten błąd, jeśli zadeklarujesz operator bool()
jako explicit
, w przeciwnym razie foo
zostanie przekonwertowany na bool
, nawet jeśli nie jest przeznaczony.
Ogólnie, funkcji składowych postaci
operator TypeName()
(przy użyciu explicit
i const
kwalifikacyjnych) są operatorzy konwersji. Pozwala rzutować klasę na dowolny typ określony przez TypeName
. W innym kierunku, konstruktorzy z jednym argumentem pozwalają rzucić dowolny typ do klasy:
class Foo {
Foo(int x); // convert int to Foo
operator bool() const; // convert Foo to bool
int x;
};
Definiuje niejawne konwersje dla swojej klasy. Kompilator spróbuje zastosować te konwersje, o ile jest to możliwe (np. Co robi dla wbudowanych typów danych, np. 5 + 1.0
). Możesz je zadeklarować jako explicit
, aby pominąć niepożądane konwersje niejawne.
Jeśli trzeba to w kontekście C++ 03, to może zajrzeć do bezpiecznego idiomu bool: http://www.artima.com/cppsource/safebool .html – Yuushi