конструктор с переменным многомерным initializer_list - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть следующий конструктор:

class A {
    template<class ...T>
    A(std::initializer_list<T> && ... args);
}

И у меня есть код для этого класса:

A a1 = {{5.0f, 6.0f}, {-7.0f, 8.0f}};

A a2 = {{{5.0f, 3.f}, {6.0f, 7.f}}, {{-7.0f, 9.f}, {12.f, 8.0f}}};

a1 может быть скомпилировано и a2 не может бытьскомпилирован.Я понимаю, что фигурные скобки являются только синтаксическим сахаром и не делают тип по умолчанию, только при передаче его функции с аргументами, которые могут быть инициализированы с помощью initilizer_list (например, std::initializer_list<float> в случае A и переменной a1).

Интересно, есть ли обходной путь, который может помочь в передаче любого измерения std::initializer_list<std::initializer_list<std::initializer_list<...>...>...> в функцию / конструктор?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Я проверил документацию и попробовал несколько разных хаков, но это не сработает.Таким образом, основной ответ был бы невозможен.Невозможно заставить конструктор или любую другую функцию принимать список фигурных скобок с неопределенным числом списков фигурных скобок, поскольку список фигурных скобок не имеет типа и не может быть неявно преобразован в std::initilizer_list<...>.

0 голосов
/ 18 февраля 2019

std :: initializer_list ...> ...>, форма должна иметь частичную специализацию, а затем, пожалуйста, ссылку на: Программа некорректна, если объявлена ​​явная или частичная специализация std :: initializer_list.

(начиная с C ++ 17)

https://en.cppreference.com/w/cpp/utility/initializer_list

...