我有以下构造函数:
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
传递给函数/构造函数?
答案 0 :(得分:0)
std :: initializer_list ...> ...>,形式 必须具有部分专业知识,然后请参考: 如果声明了std :: initializer_list的显式或部分专业化,则程序格式错误。
(自C ++ 17起)
答案 1 :(得分:0)
我检查了文档,并尝试了几种不同的方法,但均无法使用。
因此,基本的答案是不可能的。
无法使构造函数或任何其他函数接受未定义数目的大括号列表,因为大括号列表没有类型,并且不能隐式转换为std::initilizer_list<...>
。