我现在感觉真的很蠢,因为我已经快 2 年没有接触过任何 C/C++,而我的工作让我在那段时间编写 Java,现在我连简单的东西都记不住了,否则我记得在 Java 中执行此操作的方法......我有一些 C 代码,我试图在 C++ 中使用,但我遇到了一些不直接兼容的问题,比如 struct初始化。结构定义如下所示:
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,
},
},
};
关于C++ 初始化嵌套结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14907187/