Меня интересует, можно ли инициализировать кортеж списком инициализаторов (точнее - списком инициализаторов_списков_инициализаторов)? Учитывая определение кортежа:
typedef std::tuple< std::array<short, 3>,
std::array<float, 2>,
std::array<unsigned char, 4>,
std::array<unsigned char, 4> > vertex;
есть ли способ сделать следующее:
static vertex const nullvertex = { {{0, 0, 0}},
{{0.0, 0.0}},
{{0, 0, 0, 0}},
{{0, 0, 0, 0}} };
Я просто хочу добиться той же функциональности, которую я получил, используя struct вместо tuple (таким образом, инициализатором_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}}
};
Нет причин, по которым я должен использовать кортежи, просто интересно. Я спрашиваю, потому что я не могу пройти через ошибки шаблонов g++, которые генерируются моей попыткой инициализации такого кортежа.
@Motti: Итак, я пропустил правильный синтаксис для универсальной инициализации -
static vertex const nullvertex = vertex{ {{0, 0, 0}},
{{0.0, 0.0}},
{{0, 0, 0, 0}},
{{0, 0, 0, 0}} };
и
static vertex const nullvertex{ {{0, 0, 0}},
{{0.0, 0.0}},
{{0, 0, 0, 0}},
{{0, 0, 0, 0}} };
Но, похоже, вся беда кроется в массивах, у которых нет конструктора для initializer_list и обертывание массивов соответствующим конструктором кажется не такой уж простой задачей.