在C ++中,是否可以为对象的成员分配别名(不同的名称)?
作为一个例子,假设我有一个vec4
,成员为x
,y
,z
和w
,我想将其称为分别为r
,g
,b
和a
。有什么方法可以不修改vec4
的定义吗?
答案 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_r
,pic_g
,pic_b
和pic_a
代替pic.x
,pic.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