结构扩展结构的静态初始化
Static initialization for structs extending structs
我正试图找到一种方法来静态初始化一个扩展另一个结构的结构。
如果我在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;
}
相关文章:
- 多成员Constexpr结构初始化
- 为什么用结构初始化数组需要指定结构名称
- 使用指定的初始值设定项聚合匿名结构初始化
- 不同的类或结构初始化方法之间的性能差异是什么?
- 如何在结构初始化中获取成员C++
- C++正确的结构初始化
- 使用大括号进行结构初始化
- 内部结构初始化不起作用 - C++
- 使用嵌套结构初始化并集
- 使用匿名结构初始化联合
- 结构初始化语法
- 结构初始化的 C++ 向量
- C++嵌套结构初始化和访问成员
- 结构初始化中的常量正确性
- 使用 C++ 中的自定义元素进行 Const 结构初始化
- 如何在结构C++初始化内置数组
- Visual C++ 模板类成员结构初始化语法糖
- C++结构初始化
- C 在结构初始化过程中带有内部阵列的奇怪错误
- 此C/C 的结构初始化器如何使用足够的字段工作