Comment puis-je remplacer l'opérateur booléen dans une classe C++?
Je suis à la définition d'un ReturnValue
classe en C++, qui doit indiquer si une méthode a été couronnée de succès. Je veux des objets de la classe afin d'évaluer la true
sur la réussite et l' false
en cas d'erreur. L'opérateur qui dois-je remplacer pour le contrôle de la truthiness de ma classe?
- Avant de faire cela, s'il vous plaît être conscient des pièges de la mise en œuvre de
operator bool
: voir devx.com/cplus/10MinuteSolution/32145/1954
Vous devez vous connecter pour publier un commentaire.
La réponse la plus simple est de fournir
operator bool() const
, mais vous voudrez peut-être regarder dans le coffre-fort bool idiome, où, au lieu de la conversion en booléen (qui peut à son tour être implicitement converti à d'autres types intégraux) vous convertir en un autre type (pointeur vers une fonction membre d'un type privé) qui n'acceptent pas ces conversions.explicit operator bool()
pour éviter les conversions implicites.operator bool() const
dans mon cas d'utilisation, juste par souci de simplicité, mais le coffre bool idiome semble beaucoup plus approprié pour de vrai code de production. Il est un peu triste que le C++ forces vous en folie comme ceci, cependant. :-/Eh bien, vous pourriez surcharge
operator bool()
:la surcharge de l'opérateur:
Il est préférable d'utiliser explicite mot-clé ou il va interférer avec les autres surcharges comme opérateur+
Voici un exemple :
et l'utilisation :