Приветствую.
По мотивам моего велосипеда
https://rsdn.org/forum/cpp.applied/7854228.allАвтор: Свободу rg45!
Дата: 15.10.20
Там я применил инициализцию двумя параметрами-initializer_list — размерности и собственно данных.
Хочется инициализировать массив одним initializer_list, но рекурсивным. Например
multidim_dynarray arr{ {{ 1, 3 }, {2, 5 }}, {{ 4, 7 }, {6, 8 }} };
Тут синтаксис подкладывает свинью.
Вот это работает:
#include <iostream>
#include <initializer_list>
int main()
{
auto v = { 1, 2, 3 };
std::cout << typeid(v).name() << std::endl;
return 0;
}
А если
auto v={ { 1, 3 }, {2} };
то уже не компилируется. Тип v автоматом не выводится, его нужно прописать явно
std::initializer_list<std::initializer_list<int>> v = { { 1, 3 }, {2} };
Это не страшно, но рекурсивный initializer_list тоже не работает.
Вот пример, для начала вычисляющий число измерений.
int func(int t)
{
return 0;
}
template <typename T> int func(std::initializer_list<T> t)
{
return 1+func(*std::begin(t));
}
Обычный код не собирается
std::cout << func({ { 1, 3 }, {2} }) << std::endl;
Нужно
std::cout << func(std::initializer_list<std::initializer_list<int>> { { 1, 3 }, {2} }) << std::endl;
что неудобно.
Что-то можно сделать или в морг?
PS. Вроде видел какое-то решение на гитхабах, но найти не могу...
Модератор-националист Kerk преследует оппонентов по политическим мотивам.