È possibile convertire l'oggetto per un valore booleano definendo operator bool()
:
explicit operator bool() const
{
return foo.getX();
}
Il explicit
parola chiave impedisce conversioni implicite da Foo
a bool
. Ad esempio, se si inserisce accidentalmente foo
in un'espressione aritmetica come foo + 1
, il compilatore potrebbe rilevare questo errore se si dichiara come explicit
, altrimenti foo
verrà convertito in bool
anche se non previsto.
In generale, funzioni membro della forma
operator TypeName()
(con opzionale explicit
e const
qualificazione) sono operatori di conversione. Ti consente di trasmettere la tua classe a qualsiasi tipo specificato da TypeName
. Nella direzione opposta, i costruttori con un argomento consentono di lanciare qualsiasi tipo alla classe:
class Foo {
Foo(int x); // convert int to Foo
operator bool() const; // convert Foo to bool
int x;
};
Questo definisce le conversioni implicite per la vostra classe. Il compilatore tenta di applicare queste conversioni, se possibile (come quello che fa per i tipi di dati incorporati, ad esempio 5 + 1.0
). Puoi dichiararli come explicit
per sopprimere le conversioni implicite indesiderate.
Se avete bisogno di questo in un contesto in C++ 03, si potrebbe desiderare di esaminare la bool linguaggio sicura: http://www.artima.com/cppsource/safebool .html – Yuushi