我正试图找到一种静态初始化扩展另一个struct的结构的方法。
如果我在c ++中有一个结构:
struct aStruct {
int a;
int b;
};
我可以使用以下命令静态初始化此实例:
aStruct aStructInst = { 1, 2 };
如果我想让子对象存储其他信息,我也可以扩展这个结构:
struct bStruct : aStruct {
int c;
};
有没有办法静态初始化bStruct
的实例?我尝试了一些变化,但没有运气。静态初始化在我的用例中非常重要,可以将(全部)数据保存在RAM之外,这是非常有限的(嵌入式应用程序)。
答案 0 :(得分:6)
您正在使用“聚合初始化”,但具有基类的类不能是聚合,因此您不能使用聚合初始化。
正如上面的评论所说,如果你添加一个合适的构造函数,那么你可以使用相同的语法:
struct bStruct : aStruct {
constexpr bStruct(int a, int b, int c) : aStruct{a, b}, c(c) { }
int c;
};
(您不需要aStruct
的构造函数,因为它仍然是聚合,因此仍然可以使用聚合初始化直接初始化。)
答案 1 :(得分:2)
你需要在bStruct中定义一个构造函数,如下所示:
bStruct(int a, int b, int c) : aStruct{a, b}, c(c) {}
这将初始化aStruct和c字段。
注意:这是c ++ 11代码。
答案 2 :(得分:-2)
#include <iostream>
using namespace std;
struct A
{
int a; int b;
};
struct B : A
{
//c++ 0x
B(int a, int b, int c) : A{ a, b }, c(c)
{}
int c;
};
int main()
{
B b{ 1,2,3 };
cout << b.a << b.b << b.c << endl;
}