Да, я могу использовать std::initializer_list
. Да, еще проще, я могу выполнить общую инициализацию. Но как это работает? Я не могу свернуть голову вокруг 17-кратных выражений С++. Недостаточно примеров.
Вот что я придумал:
template<class T, std::size_t N>
struct foo
{
T arr[N];
template<typename... Args>
constexpr foo(Args&&... pack)
{
static_assert(sizeof...(pack) <= N, "Too many args");
std::size_t i = 0;
(arr[i++] = ...);
}
};
int main()
{
foo<int, 5> a(1, 2, 3, 4, 5);
}
EDIT: Компиляция с последним Clang. Поддерживаются выражения Fold.
Пример в реальном времени: http://coliru.stacked-crooked.com/a/777dc32da6c54892