C++初始化嵌套结构
C++ Initialize nested struct
我现在感觉真的很笨,因为我已经两年没有做任何C/C++了,而我的工作让我在那段时间里写Java,现在我连简单的东西都记不住了,否则我就记不起用Java做的方法了。。。我有一些C代码试图在C++中使用,但我在一些不直接兼容的方面遇到了问题,比如结构初始化。结构定义如下:
typedef struct
{
struct
{
uint8_t StreamingInterfaceNumber;
USB_Endpoint_Table_t DataINEndpoint;
USB_Endpoint_Table_t DataOUTEndpoint;
} Config;
struct
{
uint8_t RESERVED;
} State;
} USB_ClassInfo_MIDI_Device_t;
最初的C样式初始化如下所示:
USB_ClassInfo_MIDI_Device_t MIDI_Interface =
{
.Config =
{
.StreamingInterfaceNumber = 1,
.DataINEndpoint =
{
.Address = MIDI_STREAM_IN_EPNUM,
.Size = MIDI_STREAM_EPSIZE,
.Banks = 1,
},
.DataOUTEndpoint =
{
.Address = MIDI_STREAM_OUT_EPNUM,
.Size = MIDI_STREAM_EPSIZE,
.Banks = 1,
},
},
};
这显然在C++中不起作用。用C++初始化结构的最佳方法是什么?我不想修改这个定义,因为它存在于一个我不维护的代码库中,我想不去管它,所以我宁愿不添加构造函数。我喜欢这里建议的风格https://stackoverflow.com/a/6182627/1609411但我不知道嵌套结构的语法应该是什么样子。
我敢肯定,链接答案中的样式只涉及注释掉所有.BLAH =
部分。只要所有字段的顺序正确,它就会很好地初始化。
USB_ClassInfo_MIDI_Device_t MIDI_Interface =
{
/* .Config = */
{
/* .StreamingInterfaceNumber = */ 1,
/* .DataINEndpoint = */
{
/* .Address = */ MIDI_STREAM_IN_EPNUM,
/* .Size = */ MIDI_STREAM_EPSIZE,
/* .Banks = */ 1,
},
/* .DataOUTEndpoint = */
{
/* .Address = */ MIDI_STREAM_OUT_EPNUM,
/* .Size = */ MIDI_STREAM_EPSIZE,
/* .Banks = */ 1,
},
},
};
相关文章:
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 用C#中的并集模拟C++嵌套结构
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- Lambda 捕获、初始值设定项和嵌套结构
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 使用g++静态初始化带有命名标签的嵌套C++结构
- 重载嵌套结构/类的流插入运算符
- C++将结构传递给函数以访问嵌套结构
- C++ 在外部使用嵌套结构实现类函数
- 嵌套结构,从由空行分隔的文件中读取数据
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 如何创建结构的结构结构,等等嵌套多个结构?
- 嵌套在联合中的结构嵌套在 C 中的结构中
- 受保护的嵌套结构不能用作派生外部类中的返回类型?
- C++中的嵌套结构
- 嵌套的模板结构构造函数实现
- 使用嵌套结构初始化并集
- C++ 中的嵌套结构函数
- C++中匿名类型的嵌套结构