【发布时间】:2019-07-11 07:57:04
【问题描述】:
我有以下构造函数:
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<...>...>...> 传递给函数/构造函数?
【问题讨论】:
-
你为什么要这个?
-
您不能将尺寸指定为(模板或常规)参数吗?
-
我想将任何维度的张量解析为一维数组并同时得到它的形状。我已经对任何维度的任何类似数组的容器进行了解析,并希望为任何维度的 initializer_list 制作类似的解析器,但发现它看起来不可能。所以,我决定制作两个模板特化:
template<class ...T> A(std::initializer_list<T> && ... args);和template<class ...T> A(std::initializer_list<std::initializer_list<T>> && ... args);,它们可以帮助我解析 3-dim 列表。够了,但我想知道是否有可能做出通用的解决方案。
标签: c++ variadic-templates initializer-list