¿Por qué no hay construcción de tupla por partes?
Las plantillas estandarstd::pair
ystd::array
son casos especiales destd::tuple
y es lógico que tengan un conjunto de capacidades muy similar.
Sin embargo, únicamente entre los tres,std::pair
permite paraconstrucción a trozos. Es decir, si los tiposT1
yT2
se puede construir a partir de un conjunto de argumentosa1, a2, ...
yb1, b2, ...
, entonces moralmente hablando podemos hacer una pareja.
"pair<T1, T2> p(a1, a2, ..., b1, b2, ...)"
directamente. En la práctica, esto se explica como algo así:
std::pair<T1, T2> p(std::piecewise_construct,
std::forward_as_tuple(a1, a2, ...),
std::forward_as_tuple(b1, b2, ...));
Pregunta: ¿Por qué no existe la misma constructibilidad por partes para matrices y tuplas? ¿Hay una razón profunda, o es esto una simple omisión? Por ejemplo, sería bueno tener:
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, ...));
¿Hay alguna razón para que esto no se pueda hacer? ElEditar: ¿O estoy malinterpretando completamente el propósito de la construcción por partes?]
(Realmente tengo una situación en la que me gustaría inicializar un vector de tuplas con un valor de elemento predeterminado que preferiría construir directamente a partir de los argumentos, sin volver a explicar cada tipo de elemento de tupla).