C++ 初始化嵌套结构

标签 c++ c struct

我现在感觉真的很蠢,因为我已经快 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/

相关文章:

c++ - 获取opencv中两个帧之间的差异

c++ - Boost Spirit Rules可以参数化吗

c# - 使用 C# 客户端连接到 C 服务器时出错

c - 为什么段错误和程序以退出代码 139 结束?

c# - int 数组使用的内存与只有一个 int 的结构数组使用的内存是等价的吗?

c - 在 C 中将一个结构打包成一个 long

c++ - 部分模板特化,使用模板化类型(嵌套模板类)

C++ I/O 流为 3 个不同的类重载 : How to implement friend overload,,相同 header 中的相同 4 个 I/O 函数?

c - 这个语句在 C 中是什么意思?((uint16_t)0x0001)

c - 从文件初始化嵌套结构的值