类型转换自定义结构

时间:2018-07-06 08:24:42

标签: c++ struct casting

我有两个在给定帧中定义点和向量的结构。

struct point3D
{
  float x;
  float y;
  float z;
};
struct vector3D
{
  float x;
  float y;
  float z;
};

之所以将它们定义为两个不同的结构,是因为还有其他函数将点(point3D)与向量(vector3D)区别对待,因为它们具有相同类型的成员变量< / p>

我想知道是否有一种方法可以将其中一个转换成另一个说法:

point3D variable1;
vector3D variable2;
variable2=(vector3D)variable1;

2 个答案:

答案 0 :(得分:2)

你可以做到

struct vector3D
{
  float x;
  float y;
  float z;
};

struct point3D
{
  float x;
  float y;
  float z;
  explicit operator vector3D() {
    return {x, y, z};
  }
};

答案 1 :(得分:0)

即使我确定你不是外科医生,我也会给你刀。 Karsten建议-在评论中-从向量得出点。如果还不行,那就继续作弊:正确的演员是reinterpret_cast

point3D variable1; 
vector3D variable2;
variable2=reinterpret_cast<vector3D&>(variable1);

但是那是C ++。如果需要C样式强制转换,则采用指针强制转换:

variable2=*(vector3D*)(void*)&variable1;

不建议使用上述两种解决方案中的任何一种。我会考虑重新设计一下,如果我穿上你的鞋子。