Mi chiedo se la tupla può essere inizializzata dall'elenco di inizializzatore (per essere più precisi - da initializer_list di initializer_lists)? Considerando la definizione di parametri:Inizializzazione di std :: tuple dall'elenco di inizializzazione
typedef std::tuple< std::array<short, 3>,
std::array<float, 2>,
std::array<unsigned char, 4>,
std::array<unsigned char, 4> > vertex;
non v'è alcun modo di fare quanto segue:
static vertex const nullvertex = { {{0, 0, 0}},
{{0.0, 0.0}},
{{0, 0, 0, 0}},
{{0, 0, 0, 0}} };
voglio solo raggiungere stessa funzionalità ho ottenuto utilizzando struct invece di tuple (quindi solo gli array vengono inizializzati per 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}}
};
v'è alcun motivo devo usare tuple, chiedo solo. Lo sto chiedendo, perché non sono in grado di esaminare gli errori dei modelli g ++ generati dal mio tentativo di inizializzare questa tupla.
@Motti: così ho perso la sintassi corretta per l'inizializzazione uniforme -
static vertex const nullvertex = vertex{ {{0, 0, 0}},
{{0.0, 0.0}},
{{0, 0, 0, 0}},
{{0, 0, 0, 0}} };
e
static vertex const nullvertex{ {{0, 0, 0}},
{{0.0, 0.0}},
{{0, 0, 0, 0}},
{{0, 0, 0, 0}} };
Ma sembra che tutti i problemi si trova in array, che ha ottenuto nessun costruttore per initializer_list e avvolgere gli array con un vero costruttore non sembra un compito così facile.
Grazie per la risposta! – erjot
Perché la costruzione di una 'std :: tuple' con una lista di init rinforzata è una cosa brutta? Funziona per 'std :: pair's, e' std :: tuple' è la generalizzazione 'std :: pair', quindi non capisco il motivo di questa limitazione: S ... – rubenvb
@rubenvb è OK inizializzare una 'tupla' con inizializzazione uniforme (parentesi graffe) ma per farlo è necessario eliminare il segno di uguale. Se si dispone di un segno di uguale, significa che si costruisce un temporaneo con il costruttore di un parametro che accetta un elenco di inizializzazione e quindi si utilizza il costruttore di copie dal valore temporaneo (sebbene il compilatore possa elidere parte di questo). – Motti