【发布时间】:2012-05-03 22:47:48
【问题描述】:
我有一个用于 3d 矢量的小型数学库,我正在尝试“统一”它。
而不是为vector3f,vector3i,color3,angles等提供多个typedef结构......我试图将所有内容放在同一个结构中,如下所示:
typedef struct
{
union
{
float x;
float r;
float ax;
int x_int;
};
union
{
float y;
float g;
float ay;
int y_int;
};
union
{
float z;
float b;
float az;
int z_int;
};
} vec3;
只要类型是浮点数,一切都很好,但是当它落入 int 时,我有一些奇怪的值(这是可以理解的)。我的问题是:有没有办法在结构定义中直接/自动转换,或者我必须创建额外的函数来在 float 和 int 之间进行类型转换?
由于下面的答案,也许我应该将我原来的问题修改为以下内容:
什么是“统一”(统一我的意思是有 1 个结构)能够同时处理以下内容的最佳方式:
vector3f (浮点 x,y,z) vector3i (int x,y,z) RGB (浮点数 r,g,b) RGB (无符号字符 r,g,b) 欧拉角(ax,ay,az)
提前致谢!
【问题讨论】:
-
澄清一下,您想以
int的形式写入结构/联合,但以float的形式读出它? -
为什么不把它保留为浮点数,当你需要整数值时,只需将浮点成员转换为 int。
标签: c