C++初始化嵌套结构

C++ Initialize nested struct

本文关键字:结构 嵌套 初始化 C++      更新时间:2023-10-16

我现在感觉真的很笨,因为我已经两年没有做任何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,
                },
        },
};