我试图找到一种方法来静态初始化一个扩展另一个结构的结构.
如果我在c ++中有一个结构:
struct aStruct {
int a;
int b;
};
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令静态初始化此实例:
aStruct aStructInst = { 1, 2 };
Run Code Online (Sandbox Code Playgroud)
如果我想要一个子对象来存储其他信息,我也可以扩展这个结构:
struct bStruct : aStruct {
int c;
};
Run Code Online (Sandbox Code Playgroud)
有没有办法静态初始化一个实例bStruct?我尝试了一些变化,但没有运气.静态初始化在我的用例中非常重要,可以将(全部)数据保存在RAM之外,这是非常有限的(嵌入式应用程序).
您正在使用"聚合初始化",但具有基类的类不能是聚合,因此您不能使用聚合初始化.
正如上面的评论所说,如果你添加一个合适的构造函数,那么你可以使用相同的语法:
struct bStruct : aStruct {
constexpr bStruct(int a, int b, int c) : aStruct{a, b}, c(c) { }
int c;
};
Run Code Online (Sandbox Code Playgroud)
(您不需要构造函数,aStruct因为它仍然是聚合,因此仍然可以使用聚合初始化直接初始化).