Me pregunto si la tupla se puede inicializar con la lista de inicializadores (para ser más precisos, con initializer_list of initializer_lists)? Teniendo en cuenta la definición tupla:Inicializando std :: tuple desde la lista de inicializadores
typedef std::tuple< std::array<short, 3>,
std::array<float, 2>,
std::array<unsigned char, 4>,
std::array<unsigned char, 4> > vertex;
¿hay alguna manera de hacer lo siguiente:
static vertex const nullvertex = { {{0, 0, 0}},
{{0.0, 0.0}},
{{0, 0, 0, 0}},
{{0, 0, 0, 0}} };
sólo quiero alcanzar misma funcionalidad que tengo uso de struct en lugar de tupla (por lo tanto sólo matrices se inicializan por initializer_list):
static struct vertex {
std::array<short, 3> m_vertex_coords;
std::array<float, 2> m_texture_coords;
std::array<unsigned char, 4> m_color_1;
std::array<unsigned char, 4> m_color_2;
} const nullvertex = {
{{0, 0, 0}},
{{0.0, 0.0}},
{{0, 0, 0, 0}},
{{0, 0, 0, 0}}
};
No hay ninguna razón por la que deba usar tuplas, solo me pregunto. Pregunto, porque no puedo pasar por los errores de las plantillas g ++ generados por mi intento de inicialización de tuplas.
@Motti: Por lo que se perdió la sintaxis adecuada para la inicialización uniforme -
static vertex const nullvertex = vertex{ {{0, 0, 0}},
{{0.0, 0.0}},
{{0, 0, 0, 0}},
{{0, 0, 0, 0}} };
y
static vertex const nullvertex{ {{0, 0, 0}},
{{0.0, 0.0}},
{{0, 0, 0, 0}},
{{0, 0, 0, 0}} };
Pero parece que todo el problema reside en las matrices, las cuales recibieron ningún constructor para initializer_list y envolver matrices con el constructor adecuado parece una tarea no tan fácil.
Gracias por la respuesta! – erjot
¿Por qué es malo construir una 'std :: tuple' con una lista init reforzada? Funciona para 'std :: pair's, y' std :: tuple' es la generalización de 'std :: pair', por lo que no entiendo el motivo de esta limitación: S ... – rubenvb
@rubenvb está bien inicializar una 'tupla' con inicialización uniforme (llaves) pero para hacerlo debe colocar el signo igual. Si tiene un signo igual significa que construye un temporal con el constructor de un parámetro aceptando una lista de inicialización y luego usa el constructor de copia del valor temporal (aunque el compilador puede eludir parte de esto). – Motti