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

Static initialization for structs extending structs

本文关键字:结构 初始化 静态 扩展      更新时间:2023-10-16

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

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

struct aStruct {
    int a;
    int b;
};

我可以用静态初始化这个实例

aStruct aStructInst = { 1, 2 };

如果我想要一个子对象来存储附加信息,我也可以扩展这个结构:

struct bStruct : aStruct {
    int c;
};

有什么方法可以静态初始化bStruct的实例吗?我尝试了一些变体,但还没有成功。静态初始化在我的用例中很重要,可以将(所有)数据保留在RAM之外,这是非常有限的(嵌入式应用程序)。

您使用的是"聚合初始化",但具有基类的类不能是聚合,因此不能使用聚合初始化。

正如上面的评论所说,如果你添加了一个合适的构造函数,那么你可以使用相同的语法:

struct bStruct : aStruct {
    constexpr bStruct(int a, int b, int c) : aStruct{a, b}, c(c) { }
    int c;
};

aStruct不需要构造函数,因为它仍然是一个聚合,因此仍然可以使用聚合初始化直接初始化)。

您需要在bConstruct中定义一个构造函数,如下所示:

bStruct(int a, int b, int c) : aStruct{a, b}, c(c) {}

这将初始化aStruct和c字段。

注意:这是c++11代码。

#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;
}