【问题标题】:Is it possible to use structured binding in the member initializer list of a constructor?是否可以在构造函数的成员初始化器列表中使用结构化绑定?
【发布时间】:2021-10-26 19:54:01
【问题描述】:

我想创建一个包含多个const 成员变量的类。不幸的是,我需要初始化这些变量的函数来自一个非常 C 风格的外部库。因此,我一直在雇用以下各种“中间人”:

struct Struct {
    int foo, bar;
    Struct(int baz, int qux) {
        initializerFunction(&foo, baz, &bar, qux);
    }
}
class Class {
    const int foo, bar;
    Class(Struct s) : anArray(s.foo), anotherArray(s.bar) {}
public:
    Class(int baz, int quz) : Class(Struct(baz, qux)) {}
}

但是,我有点不喜欢这种结构。我希望能够做这样的事情:

class Class {
    const int foo, bar;
public:
    Class(int baz, int qux) : [foo, bar](Struct(baz, qux)) {}
}

有没有可能我只是使用了不正确的语法,或者构造函数的成员初始化器列表中确实不允许结构化绑定?

【问题讨论】:

  • 强制:私有const 数据成员基本上没有给表格带来任何价值,并且会带来很多麻烦。我只会让成员成为非const 并继续前进。

标签: c++ constructor c++17


【解决方案1】:

结构化绑定声明变量(好吧,它们本身不是“变量”,但没关系)。您不能使用结构化绑定来操作现有对象。这包括成员对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多