我现在感觉真的很蠢,因为我已经做了差不多两年的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,但我不知道嵌套结构的语法应该是什么样的。
答案 0 :(得分:1)
我很确定链接答案中的样式只涉及评论所有.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,
},
},
};