Dlaczego nie ma fragmentarycznej konstrukcji krotki?
Standardowe szablonystd::pair
istd::array
są specjalne przypadkistd::tuple
i ma rację, że powinny mieć bardzo podobny zestaw możliwości.
Jednak wyjątkowo wśród tych trzech,std::pair
pozwala nabudowa fragmentaryczna. To znaczy, jeśli typyT1
iT2
może być skonstruowany z zestawu argumentówa1, a2, ...
ib1, b2, ...
, wtedy mówiąc moralnie możemy zrobić parę
"pair<T1, T2> p(a1, a2, ..., b1, b2, ...)"
bezpośrednio. Praktycznie jest to wyrażone jako coś takiego:
std::pair<T1, T2> p(std::piecewise_construct,
std::forward_as_tuple(a1, a2, ...),
std::forward_as_tuple(b1, b2, ...));
Pytanie: Dlaczego nie ma takiej samej fragmentarycznej konstruktywności dla tablic i krotek? Czy istnieje głęboki powód, czy jest to zwykłe pominięcie? Na przykład byłoby miło mieć:
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, ...));
Czy jest jakiś powód, dla którego nie można tego zrobić? [Edytować: A może nie rozumiem całkowicie celu częściowej konstrukcji?]
(Naprawdę mam sytuację, w której chciałbym zainicjować wektor krotek z domyślną wartością elementu, który wolałbym skonstruować bezpośrednio z argumentów, bez ponownego opisywania każdego typu elementu krotki).