c++ - 具有可变多维 initializer_list 的构造函数

标签 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 和变量 a1 的情况下)。

我想知道,是否有任何解决方法可以帮助传递任何维度的 std::initializer_list<std::initializer_list<std::initializer_list<...>...>...>函数/构造函数?

最佳答案

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

关于c++ - 具有可变多维 initializer_list 的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54738709/

相关文章:

c++ - 初始化器列表和运算符的 RHS

c++ - 运行 ShellExecuteEx 后获取线程退出码

c++ - 如何从任意函数中创建仿函数?

c++ - 获取 C/C++ 中打印的最后一个字符串

c++ - 在编译时重新解释模板类型

c++ - decltype 返回的模板推导/替换错误

c++ - 是否可以对容器的容器使用大括号括起来的初始化列表?

c++ - 初始化 vector 的高效而优雅的方法

c++ - Qt - 将 QString 转换为 QByteArray 的索引 - 将设备 ID 分成 3 个索引

c++ - 从模板生成的重复类型