Типирование пользовательских конструкций - PullRequest
0 голосов
/ 06 июля 2018

У меня есть две структуры, определяющие точку и вектор в данном кадре.

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

Причина, по которой они определены как две разные структуры, заключается в том, что существуют другие функции, которые обрабатывают точку (point3D) по-разному по отношению к вектору (vector3D), поскольку они имеют переменные-члены одного типа

Мне было интересно, есть ли способ перевести одно из них в другое, скажем, например:

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

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Я дам тебе нож, хотя я уверен, что ты не хирург. Карстен рекомендовал - в комментарии - вывести точку из вектора. Если это не так, продолжайте обманывать: правильный оператор приведения - reinterpret_cast.

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

но это был C ++. Если приведение в стиле C - это то, что вам нужно, то приведение указателя - это путь:

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

Любое из двух решений выше не рекомендуется. Редизайн я бы рассмотрел, если бы на твоем месте я был.

0 голосов
/ 06 июля 2018

вы можете сделать это

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

struct point3D
{
  float x;
  float y;
  float z;
  explicit operator vector3D() {
    return {x, y, z};
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...