Сегодня я пытаюсь создать кортеж немного конкретным (для меня как минимум) и во время компиляции.Создайте кортеж с переменным типом завернутый
У меня есть некоторая базовая-структура, скажу:
struct Foo1 { int data; };
struct Foo2 { int data; };
struct Foo3 { int data; };
И еще один-структуру, но с некоторым шаблоном материалом:
template < typename T,
size_t Size >
struct Metadata {
using type = T;
std::bitset<Size> bitset;
};
Так что теперь я хочу создать такой кортеж:
constexpr std::tuple<Metadata<Foo1, 3>, Metadata<Foo2, 3>, Metadata<Foo3, 3>> test { {0}, {0}, {0}};
Но автоматическим способом больше нравится:
template < typename ... Ts >
constexpr auto make_metadata() {
return std::tuple<Metadata<Foo1, sizeof...(Ts)>,
Metadata<Foo2, sizeof...(Ts)>,
Metadata<Foo3, sizeof...(Ts)>>{{0},{0},{0}};
}
Ну, последний код далеко не хорош, поэтому я хотел бы иметь что-то подобное, но автоматически. Возможно, с tuple_cat и сгибанием выражения, но я немного потерял. Так что если кто-то знает ответ :)
Кажется, что с C++ 17 Мне не нужно явно указывать std :: make_tuple. Но спасибо вам и Гийому в любом случае :) –
@MathieuVanNevel Конечно, вы сможете сохранить 5 символов и просто написать 'std :: tuple (...)'. – Barry