具有可变多维 initializer_list 的构造函数
constructor with variadic multidimensional initializer_list
我有以下构造函数:
class A {
template<class ...T>
A(std::initializer_list<T> && ... args);
}
我有代码 class:
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<...>...>...>
传递给 function/constructor?
std::initializer_list...>...> , 形式
必须偏特化,然后请参考:
如果声明了 std::initializer_list 的显式或部分特化,则程序格式错误。
(C++17 起)
我检查了文档并尝试了几种不同的 hack,但它不起作用。
所以,基本的答案是不可能的。
不可能使构造函数或任何其他函数接受未定义数量的大括号列表的大括号列表,因为大括号列表没有类型并且不能隐式转换为 std::initilizer_list<...>
.
我有以下构造函数:
class A {
template<class ...T>
A(std::initializer_list<T> && ... args);
}
我有代码 class:
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<...>...>...>
传递给 function/constructor?
std::initializer_list...>...> , 形式 必须偏特化,然后请参考: 如果声明了 std::initializer_list 的显式或部分特化,则程序格式错误。
(C++17 起)
我检查了文档并尝试了几种不同的 hack,但它不起作用。
所以,基本的答案是不可能的。
不可能使构造函数或任何其他函数接受未定义数量的大括号列表的大括号列表,因为大括号列表没有类型并且不能隐式转换为 std::initilizer_list<...>
.