结构体的静态初始化扩展结构

时间:2015-06-30 19:30:27

标签: c++

我正试图找到一种静态初始化扩展另一个struct的结构的方法。

如果我在c ++中有一个结构:

struct aStruct {
    int a;
    int b;
};

我可以使用以下命令静态初始化此实例:

aStruct aStructInst = { 1, 2 };

如果我想让子对象存储其他信息,我也可以扩展这个结构:

struct bStruct : aStruct {
    int c;
};

有没有办法静态初始化bStruct的实例?我尝试了一些变化,但没有运气。静态初始化在我的用例中非常重要,可以将(全部)数据保存在RAM之外,这是非常有限的(嵌入式应用程序)。

3 个答案:

答案 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;
}