C ++初始化嵌套结构

时间:2013-02-16 05:11:59

标签: c++ c struct

我现在感觉真的很蠢,因为我已经做了差不多两年的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,但我不知道嵌套结构的语法应该是什么样的。

1 个答案:

答案 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,
                },
        },
};