0

C/C++ を使ってからほぼ 2 年が経ちましたが、その間は仕事で 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しかし、ネストされた構造体の構文がどのように見えるべきかわかりません。

4

1 に答える 1

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,
                },
        },
};
于 2013-02-16T05:20:33.260 に答える