由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C++编程问题:union inside struct
相关主题
C++的"初始化"小结一个windows编程问题
*(&b1)=b编译不过,b1=b可以,区别是?[合集] 问个多线程的问题
强迫症爱好者进来做题了GCC 居然允许变量长度的向量
[求教大虾]关于C++编译期变量和运行期变量的区别,总是有疑惑STL/vector引用成员变量。
C++编程原则的问题程序中的各个变量/数组的内存地址是否会混在一起?
刚看完类这一章,有些大小问题,请指教,谢谢问个c++在不同函数里分配内存和释放内存的弱问题
c++如果调用没参数的函数不用加()就好了初级问题:Python怎么指代上一个命令的输出 (转载)
问个a=b 的问题for 循环下给不同变量赋值问题
相关话题的讨论汇总
话题: vec话题: double话题: xa话题: union话题: public
进入Programming版参与讨论
1 (共1页)
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不熟悉,请问构造函数里面
: 定义了等价性以后是不是就一直等价了?

1 (共1页)
进入Programming版参与讨论
相关主题
for 循环下给不同变量赋值问题C++编程原则的问题
FP 之我见 (长)刚看完类这一章,有些大小问题,请指教,谢谢
这么说吧,fp不是否定变量,而是控制变量的范围c++如果调用没参数的函数不用加()就好了
R似乎根本就没有认真考虑过global variable的改写问题问个a=b 的问题
C++的"初始化"小结一个windows编程问题
*(&b1)=b编译不过,b1=b可以,区别是?[合集] 问个多线程的问题
强迫症爱好者进来做题了GCC 居然允许变量长度的向量
[求教大虾]关于C++编译期变量和运行期变量的区别,总是有疑惑STL/vector引用成员变量。
相关话题的讨论汇总
话题: vec话题: double话题: xa话题: union话题: public