给一个对象的成员一个别名

Give an alias to an object's member

在 C++ 中,是否可以为对象的成员分配别名(不同的名称)?

举个例子,假设我有一个 vec4,其中包含我要引用的成员 xyzw分别为 rgba。有没有办法在不修改 vec4?

的定义的情况下做到这一点

你不能使 v.rv.x 相同,除非你修改 class 定义或编写 #define r x,这显然会导致很多问题。您可以做的最接近的事情是这样的:

constexpr auto r = &vec4::x;
v.*r;  // equivalent to v.x

如果不修改 vec4,您将无法用 vec4_object.r 代替 vec4_object.x

如果你可以使用 C++17,那么你可以做的一件事就是使用 structured binding 比如

vec4 pic = ...;
auto& [pic_r, pic_g, pic_b, pic_a] = pic;

然后您可以使用 pic_rpic_gpic_bpic_a 代替 pic.xpic.ypic.zpic.w

如果你的vec4看起来像

struct vec4
{
    int x, y, z, w;
};

那么这就是开箱即用的。如果不是,您仍然可以提供支持以允许这样做。您可以在 this blog post

中看到这是如何完成的