可变参数多维initializer_list的构造函数

时间:2019-02-17 23:34:29

标签: c++ variadic-templates initializer-list

我有以下构造函数:

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和变量{{ 1}})。

我想知道,是否有任何变通办法可以帮助将任何维度a1传递给函数/构造函数?

2 个答案:

答案 0 :(得分:0)

std :: initializer_list ...> ...>,形式 必须具有部分专业知识,然后请参考: 如果声明了std :: initializer_list的显式或部分专业化,则程序格式错误。

(自C ++ 17起)

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

答案 1 :(得分:0)

我检查了文档,并尝试了几种不同的方法,但均无法使用。 因此,基本的答案是不可能的。 无法使构造函数或任何其他函数接受未定义数目的大括号列表,因为大括号列表没有类型,并且不能隐式转换为std::initilizer_list<...>