给对象的成员一个别名

时间:2019-05-03 14:55:37

标签: c++ alias

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

作为一个例子,假设我有一个vec4,成员为xyzw,我想将其称为分别为rgba。有什么方法可以不修改vec4的定义吗?

2 个答案:

答案 0 :(得分:4)

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

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

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

,然后可以使用pic_rpic_gpic_bpic_a代替pic.xpic.y,{{1} }和pic.z

如果您的pic.w看起来像

vec4

然后开箱即用。如果没有,您仍然可以提供支持以允许这样做。您可以在this blog post

中查看其操作方法

答案 1 :(得分:2)

除非修改类定义或编写v.r,否则不能使v.x#define r x是同一件事,这显然会引起很多问题。您可以做的最接近的事情是这样的:

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