c++ - 大括号括起来的初始值设定项列表的无效使用

标签 c++ c++11 initializer-list

我要初始化Foo类

class Foo {
public:
    struct MyStruct {
        uint8 i;
        char c;
    };

    Foo(MyStruct args...){

    };
};

但是我遇到了一个错误

error: invalid use of brace-enclosed initializer list

auto test = Foo(
    {1, 'a'},
    {2, 'b'}
);

如果我用变量来做,不会有错误

Foo::MyStruct a1 = {1, 'a'};
Foo::MyStruct b2 = {2, 'b'};

auto test = Foo(a1, b2);

但我对此并不满意,我想让代码紧凑

最佳答案

您需要明确说明要传递给构造函数的类型。以下编译:

auto test = Foo(
  Foo::MyStruct{1, 'a'},
  Foo::MyStruct{2, 'b'}
);

尽管 Foo(MyStruct args...) 不是 C++ 风格的可变参数函数,但请注意 aschepler 的评论。因此,如果您真的要尝试使用构造函数参数做一些事情,您可能会遇到麻烦。换句话说:你会遇到麻烦 :)。

关于c++ - 大括号括起来的初始值设定项列表的无效使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46953544/

相关文章:

c++ - 为什么从初始化列表中初始化 vector 时不使用 move 构造(通过隐式构造函数)

C++ - 使用initializer_list作为参数的模板函数

c++ - 编译器优化如何影响代码逻辑?

c++ - 列表初始化器和可变参数构造函数

c++ - Visual Studio 找不到任何标准 C++ 库文件

c++ - 如何在 C++ (os Windows) 中从麦克风获取 PCM 数据?

c++ - 如何找到应用程序关闭时崩溃的原因?

c++ - 在 visual studio 定义中停止环境路径扩展

c++ - 如何在 Arduino 上将时间设置为中央时区?

c++ - Boost ASIO 网络时序问题