43

ユニオンがあるとしましょう:

typedef union someunion {
    int a;
    double b;
} myunion;

たとえば a=123 に設定した後、ユニオンに含まれる型を確認することはできますか? 私のアプローチは、この共用体を何らかの構造に追加し、uniontype が int の場合は 1 に、double の場合は 2 に設定することです。

typedef struct somestruct {
    int uniontype
    myunion numbers;
} mystruct;

より良い解決策はありますか?

4

6 に答える 6

37

より良い解決策はありますか?

いいえ、あなたが示した解決策は最良の (そして唯一の) 解決策です。unions は非常に単純化されています。何を何に割り当てたかを「追跡」しません。それらが行うことは、すべてのメンバーに対して同じメモリ範囲を再利用できるようにすることだけです。それらはそれ以上のものを提供しないため、それらを で囲み、struct追跡のために「タイプ」フィールドを使用することは、まさに正しいことです。

于 2013-05-18T10:30:00.490 に答える