可变多维多维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>Aand变量的情况下a1)。

我想知道,是否有任何变通办法可以帮助将任何维传递std::initializer_list<std::initializer_list<std::initializer_list<...>...>...>给函数/构造函数?

哲学

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

可变多维数组作为函数参数

std :: initializer_list构造函数

嵌套的initializer_list用于初始化多维数组

无法从 initializer_list 转换为我的类型,它具有模板可变参数构造函数

C ++ SFINAE双嵌套的initializer_list与可变参数模板构造函数

使用std :: initializer_list构造函数而不会产生歧义?

带有initializer_list的可选构造函数

构造函数中的std :: initializer_list转换

C ++复制构造函数被调用而不是initializer_list <>

如何编写正确的std :: initializer_list构造函数

采用 std::initializer_list 的构造函数优于其他构造函数

添加initializer_list构造函数后,构造函数调用的无提示中断

如何使用std :: initializer_list <double>构造一个构造函数

CTAD、initializer_list、非显式构造函数和函数调用

通过make_unique / make_shared调用initializer_list构造函数

大括号构造函数更喜欢使用initializer_list而不是更好的匹配。为什么?

std :: initializer_list构造函数和“初始化初始化”问题

显式构造函数和std :: initializer_list初始化

如何检查类型'T'是否具有'T(std :: initializer_list <U>)'构造函数

为c样式的字符串创建std :: initializer_list构造函数

如何使用带有std :: initializer_list的构造函数设计类?

具有单个参数的歧义构造函数:initializer_list和int

使用constexpr initializer_list构造函数时,MSVC无法编译

std :: initializer_list作为模板类中的构造函数参数

在std :: initializer_list的构造函数的参数列表中的折叠与“正常”折叠

C ++构造函数采用大小为一的std :: initializer_list

initializer_list在此构造函数中允许什么样的初始化?

如何使构造函数类似于多维向量?

在模板函数中使用initializer_list