b*******t 发帖数: 459 | 1 比如我要定义一个class叫做vec(向量),它有三个变量和一堆函数:
class vec {
public:
double x,y,z;
public:
vec(){};
~vec() {};
...
}
现在我希望定义某种union结构能让我也能用vec.xa[0],vec.xa[1],vec.xa[2]
来访问vec.x, vec.y, vec.z,如何能够实现呢?谢谢。。。 | p***o 发帖数: 1252 | 2 how about this?
struct xxx {double x, y, z;};
union
{
double xa[3];
xxx v;
};
however, you need to use vec.v.x, vec.v.y, vec.v.z
if you insist on vec.x, vec.y, vex.z, probably #define
could be used, just as sockaddr_in
【在 b*******t 的大作中提到】 : 比如我要定义一个class叫做vec(向量),它有三个变量和一堆函数: : class vec { : public: : double x,y,z; : public: : vec(){}; : ~vec() {}; : ... : } : 现在我希望定义某种union结构能让我也能用vec.xa[0],vec.xa[1],vec.xa[2]
| s***e 发帖数: 122 | 3 楼主这个说要union也是让我百思不得其解,不过洗个澡出来发现了另外一个好办法,
就是用引用:)
#include
class vec {
public:
double xa[3];
double & x;
double & y;
double & z;
public:
vec() : x(xa[0]), y(xa[1]), z(xa[2]) {}
~vec() {}
};
void main() {
vec v;
v.x = 1;
v.y = 2;
v.z = 3;
printf("%f, %f, %f\n", v.xa[0], v.xa[1], v.xa[2]);
}
【在 p***o 的大作中提到】 : how about this? : struct xxx {double x, y, z;}; : union : { : double xa[3]; : xxx v; : }; : however, you need to use vec.v.x, vec.v.y, vec.v.z : if you insist on vec.x, vec.y, vex.z, probably #define : could be used, just as sockaddr_in
| p***o 发帖数: 1252 | 4 这个改变了vec的大小且影响速度,估计楼主不喜欢...
也许搞个double & x()就可以了。
【在 s***e 的大作中提到】 : 楼主这个说要union也是让我百思不得其解,不过洗个澡出来发现了另外一个好办法, : 就是用引用:) : #include : class vec { : public: : double xa[3]; : double & x; : double & y; : double & z; : public:
| s***e 发帖数: 122 | 5 用函数也是我比较喜欢的做法。
不过用引用应该不会影响速度,因为引用也就基本上像一个指针而已。
【在 p***o 的大作中提到】 : 这个改变了vec的大小且影响速度,估计楼主不喜欢... : 也许搞个double & x()就可以了。
| b*******t 发帖数: 459 | 6 这个看起来是个办法,谢谢!我对reference variable不熟悉,请问构造函数里面
定义了等价性以后是不是就一直等价了?
【在 s***e 的大作中提到】 : 楼主这个说要union也是让我百思不得其解,不过洗个澡出来发现了另外一个好办法, : 就是用引用:) : #include : class vec { : public: : double xa[3]; : double & x; : double & y; : double & z; : public:
| s***e 发帖数: 122 | 7 是这样的。只有第一次=操作符是用于将该引用指向某变量。之后=操作符都是赋值操作。
我还得谢谢你提醒了我想起了以前看过的对引用变量的说明呢。
【在 b*******t 的大作中提到】 : 这个看起来是个办法,谢谢!我对reference variable不熟悉,请问构造函数里面 : 定义了等价性以后是不是就一直等价了?
|
|