C++ union中特定于编译器的结构实现的标准替代方案

C++ union中特定于编译器的结构实现的标准替代方案,c++,C++,在代码块中,它允许匿名结构,这是非常有用的,因为我尝试过联合,但效果不一样 现在我的问题是,既然它不是标准,那么标准等同于什么呢 typedef union Alpha { uint32_t OuterInt; struct { unsigned char a, b, c, d, e, f; }; } *pAlpha; 请看,我不能用联合替换匿名结构,因为它的工作方式不同。如果我定义结构,并用StructName.a、StructName.b等替

在代码块中,它允许匿名结构,这是非常有用的,因为我尝试过联合,但效果不一样

现在我的问题是,既然它不是标准,那么标准等同于什么呢

typedef union Alpha
{
    uint32_t OuterInt;
    struct
    {
        unsigned char a, b, c, d, e, f;
    };
} *pAlpha;
请看,我不能用联合替换匿名结构,因为它的工作方式不同。如果我定义结构,并用StructName.a、StructName.b等替换对它的每次调用

还有别的办法吗

标准的等价物是什么

比如:

struct MyData
{
    unsigned char a, b, c, d, e, f;
};
union Alpha
{
    uint32_t OuterInt;
    MyData   data;

} *pAlpha;

struct
s不必有名称。甚至在C中也没有:一种常见的模式(即在C中)如下:
typedef struct{…}Foo结构没有名称是什么意思:S Struct Beta{};他有个名字。Beta是它的名字。我通过一个名称引用我的对象。不问题是,如何用等价的和C++的标准来替换那个内部结构。如果我编译的学究式错误,我根本不会编译:“警告:ISO C++禁止匿名结构[学究]”看代码。我也看不到一个名字。嗯,这需要我这样做:阿尔法-梅;Alpha.data.a以访问成员a。对于匿名结构,我需要:Alpha.a。可以这样想:typedef union XYZ{uint32_t Color;struct{unsigned char X,Y,Z;};}*PXYZ;将此消息传递给位图函数(CreateDIBitmap)或类似的函数将起作用,但传递您建议的内容将立即导致崩溃。它还要求所有使用以前版本的函数现在都使用数据作为访问器,如:Alpha.data.a