Les modèles standard std::pair
et std::array
sont des cas particuliers de std::tuple
, et il va de soi qu'ils doivent avoir une très similaires ensemble de capacités.
Cependant, unique parmi les trois, std::pair
permet par morceaux de la construction. C'est, si les types T1
et T2
peut être construit à partir d'un ensemble d'arguments a1, a2, ...
et b1, b2, ...
, puis moralement parlant, nous pouvons faire une paire
"pair<T1, T2> p(a1, a2, ..., b1, b2, ...)"
directement. Pratiquement, cela est détaillé comme quelque chose comme ceci:
std::pair<T1, T2> p(std::piecewise_construct,
std::forward_as_tuple(a1, a2, ...),
std::forward_as_tuple(b1, b2, ...));
Question: Pourquoi n'est pas le même par morceaux constructibility existent pour les tableaux et les tuples? Est-il une raison plus profonde, ou est-ce une simple omission? Par exemple, il serait agréable d'avoir:
std::tuple<T1, T2, T3> t(std::piecewise_construct,
std::forward_as_tuple(a1, a2, ...),
std::forward_as_tuple(b1, b2, ...),
std::forward_as_tuple(c1, c2, ...));
Est-il une raison pour laquelle cela ne peut être fait? [Edit: Ou suis-je mal comprendre le but de piecewise de construction entièrement?]
(Je ne vraiment avoir une situation dans laquelle je voudrais initialiser un vecteur de n-uplets avec un défaut la valeur de l'élément que je préfère construire directement à partir des arguments, sans fautes d'orthographe de chaque tuple de type d'élément nouveau.)