En C ++ 17, comment déclarer et initialiser un vecteur de paires (ou tuples) avec un élément optionnel?
std::vector<std::pair<int, optional<bool> > > vec1 = { {1, true},
{2, false},
{3, nullptr}};
J'ai une paire où le deuxième élément peut être nul / facultatif.
std::piecewise_construct
peut également fournir des alternatives intéressantes.reset
ici.Réponses:
Vous recherchez au
std::nullopt
lieu denullptr
.la source
std::
comme ça? Pourquoi pas justeusing std::vector
et amis, pour que vous puissiez simplement écrirevector<pair<int, optional<bool>>
? Lit plus sainementvector
,pair
,optional
, etc. J'utilise dans cette ligne. L'inclusion de l'espace de noms en ligne me dit sans ambiguïté d'où vient cette fonction et ce qu'elle fait; la ligne est autonome. Cela est particulièrement vrai pour les grands projets (car il évite complètement les conflits d'espace de noms), mais également utile pour des exemples de code concis.std
?arg
,count
,find
,size
std::
est totalement discret. Ce serait différent si le nom de l'espace de noms était beaucoup plus long.Ou construction simple par défaut:
la source
std::nullopt
mieux communique l'intention.