Comment utiliser boost::optional<T> pour retourner la valeur NULL en C++?
J'ai une fonction qui doit retourner la valeur NULL dans certains cas, et il y a une autre fonction qui doit tester la valeur de retour de cette fonction. Je suis conscient de boost::optional, mais je suis pas sûr de savoir comment utiliser la syntaxe.
Ci-dessous serait un exemple simple de ladite utilisation:
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
}
Quelqu'un peut s'il vous plaît aider avec la syntaxe?
Grâce.
Vous avez posé 10 questions et acceptées 0 réponses. Vous devriez revenir en arrière et accepter les réponses correctes.
OriginalL'auteur czchlong | 2011-10-27
Vous devez vous connecter pour publier un commentaire.
Il reste dans le "
NULL
" état jusqu'à ce que vous la définissez. Vous pouvez utiliser cet idiome:Alors:
OriginalL'auteur rerun
Permettez-moi de mentionner quelques petites choses avant d'en arriver à la question.
Si la chaîne doit toujours être trouvé (programmeur erreur si elle n'est pas), vous devriez probablement jeter si il ne peut pas être à la place de l'aide facultative. Vous pouvez même try/catch/jeter, même si elle est saisie de l'utilisateur.
Si votre classe imite récipient comme la sémantique, vous devez envisager d'utiliser un
end
sentinelle pour indiquer qu'il n'a pas été trouvé, pas null.Si toutefois retourner null représentation est ce que vous êtes après, votre type de retour de fonction serait
boost::optional<int>
et le retour null seraitreturn boost::none;
.Je vous recommande également à l'aide de
boost::none
, car il augmente la lisibilité (à mon avis).OriginalL'auteur Mark B
Essayez ceci:
Je voudrais également typedef le modèle, pour faciliter les choses:
is_initialized
est obsolète; utiliser lebool
opérateur de conversion à la place (par exempleif (result) { ... }
). Aussi, votrefunct1
type de retour ne doit pas êtreint
.OriginalL'auteur Mark Ingram