C++ - 有没有办法为字段创建别名

EOG*_*EOG 5 c++ alias c++11

有没有办法为C++ 11中的class/stuct创建别名?我的意思是说

我上课了

class Vector4
{
    public:
        float X,Y,Z,W;
}
Run Code Online (Sandbox Code Playgroud)

我有一个别名

typedef Vector4 Color;
Run Code Online (Sandbox Code Playgroud)

有没有办法为Vector4 X,Y,Z,W字段创建别名以作为颜色R,G,B,A?

Ded*_*tor 7

只需像这样定义 Vector4,使用匿名联合(没有匿名结构,尽管它们是常见的扩展)。

\n\n
typedef struct Vector4\n{\n    union{float X; float R;};\n    union{float Y; float G;};\n    union{float Z; float B;};\n    union{float W; float A;};\n} Vector4;\ntypedef Vector4 Color;\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您无法重新定义 Vector4,您可以只定义一个与布局兼容的标准布局类并使用可怕的reinterpret_cast.
\n这是可行的,因为具有布局兼容成员的标准布局类是兼容的。

\n\n
struct Color\n{\n    float R, G, B, A;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

标准报价:

\n\n
\n

标准布局类是这样的类:
\n \xe2\x80\x94 没有非标准布局类类型(或此类类型的数组)或引用的非静态数据成员,
\n \xe2\x80\ x94 没有虚函数 (10.3),也没有虚基类 (10.1),
\n \xe2\x80\x94 对所有非静态数据成员具有相同的访问控制(第 11 条),
\n \xe2\x80\x94没有非标准布局基类,
\n \xe2\x80\x94 或者在最底层的派生类中没有非静态数据成员并且最多有一个带有非静态数据成员的基类,或者没有基类具有非静态数据成员的类,并且
\n \xe2\x80\x94 没有与第一个非静态数据成员类型相同的基类。

\n\n

标准布局结构体是使用类键结构体或类键类定义的标准布局类。
\n 标准布局联合是使用类键联合定义的标准布局类。

\n
\n