Comment stocker une sorte de “null” en C++ double ou variable int?

J'ai une classe qui ressemble à ce

struct A {
     double a1;
     int b1;
     double a2;
     int b2;
};

J'ai de la lecture d'un fichier de valeurs pour a1, b1, a2, et b2. La plupart du temps tous les quatre nombres sont sur le fichier, mais parfois il y a seulement deux numéros.

Lorsqu'il y a deux numéros, je veux stocker les valeurs dans a1, et b1 et je veux stocker "rien" dans a2 et b2. Si a2 et b2 ont été les pointeurs, j'ai juste pu les affecter à la nullptr, mais ils ne sont pas des pointeurs.

Il y a une chose que je peux stocker dans double et int variables pour indiquer que "rien" est-il stocké?

Je sais Boost.Optional est disponible, mais j'essaie d'éviter que de la bibliothèque.

Choisissez une valeur que vous connaissez vos variables ne seront jamais prendre et nom il NULL. Puis de comparer les variables à NULL. Les premiers choix sont souvent 0 ou -1
C'est le problème, je ne sais pas les valeurs de mes variables ne les auront jamais.
Non, ne pas les nommer, il NULL. Donnez-lui un nom unique qui n'entre pas en conflit avec la bibliothèque standard.
Si vous ne voulez vraiment pas à utiliser la bibliothèque boost pour une raison quelconque, il est assez simple de rédiger votre propre optional pour les types simples - il suffit de placer la valeur et un bool dans un peu de classe avec une interface adaptée. Si vous souhaitez un soutien non négligeable types (en particulier, les types qui ne peut pas être par défaut construit), puis à l'aide d'une bibliothèque, vous fera économiser un monde de douleur.
Pour en virgule flottante, vous pourriez être en mesure d'utiliser NaN, mais pour autant que je sais soutien à virgule flottante NaN n'est pas universelle. Pour le type int, INT_MIN être raisonnable, mais vous avez dit que vous ne savez pas de toutes les valeurs de vos variables ne les auront jamais. À la différence pour les pointeurs, il n'y a pas de distinction de valeur "nulL pour les entiers. Étant donné que, votre seul choix est de stocker des informations indiquant si une véritable valeur est stockée ou pas. Si vous le faites avec Boost.Optional, avec votre propre classe similaire à Boost.Optional, ou tout simplement par l'ajout de bool membres est à vous.

OriginalL'auteur jlconlin | 2014-08-28