J'ai une fonction qui doit renvoyer NULL dans certains cas et une autre fonction doit tester la valeur de retour de cette fonction. Je suis au courant de boost :: facultatif mais je ne suis pas sûr de savoir comment utiliser la syntaxe.
ci-dessous serait un exemple simple de ladite utilisation: P>
int funct1(const string& key) { // use iterator to look for key in a map if(iterator == map.end()) { return NULL // need help here! else return it->second; } void funct2(string key) { if(funct1(key) == NULL) { // <-- need help here! // do something } else { // do something else }
3 Réponses :
Il reste dans l'état " puis: p> null code>" jusqu'à ce que vous le définis. Vous pouvez utiliser cet idiome:
Essayez ceci:
typedef boost::optional<int> OptionalInt;
La documentation boost.Optional indique que is_initialisé code> est obsolète; Utilisez plutôt l'opérateur de conversion code> bool code> à la place (par exemple
si (résultat) {...} code>). En outre, votre
FunCt1 Code> Le type de retour ne doit pas être
int code>.
Permettez-moi de mentionner quelques choses avant que je reçoive la question. P>
Si la chaîne doit toujours être trouvée (erreur de programmation si ce n'est pas), vous devez probablement lancer si cela ne peut pas être au lieu d'utiliser un optionnel. Vous voudrez peut-être même essayer / attraper / jeter même s'il s'agit d'une entrée utilisateur. P>
Si votre classeur imitat de conteneur comme une sémantique, vous devez envisager d'utiliser une phrase code> Sentinel pour indiquer que cela n'a pas été trouvé, pas NULL. P>
Si cependant retourner une représentation NULL est ce que vous êtes après, votre type de retour serait boost :: optionnel
retour boost :: aucun ; code>. p>
HI Mark B. - Pourquoi vous recommandez-vous de retourner Boost :: Néant tandis que les autres préfèrent simplement retourner la facultative elle-même? Y a-t-il une différence? S'il y a, lequel est préféré dans un code professionnel? Mon code est destiné à être une bibliothèque que d'autres utilisateurs peuvent utiliser, d'essayer / jetteraient / lancez-la plus préférées dans le code qui repose fortement sur la saisie de l'utilisateur? Merci.
Je recommanderais également d'utiliser Boost :: Aucun Code>, car il augmente la lisibilité (à mon avis).
Boost :: Aucun Code> est la valeur par défaut de tout
boost :: facultatif code>
Vous avez posé 10 questions et accepté 0 réponses. Vous devriez revenir en arrière et accepter les bonnes réponses.