在两种相同类型的实现之间进行转换的最有效方法是什么?

时间:2012-06-17 22:58:03

标签: c++

例如,我有一个QMatrix4x4,我有一个Ogre :: Matrix4。

从QMatrix转换到Ogre :: Matrix4有点单调乏味,我想知道是否有任何可靠的解决方案?

现在我只是在for循环中复制每个元素,有什么建议吗?

1 个答案:

答案 0 :(得分:1)

在C ++ 11中,如果两种类型都是布局兼容,则它们之间只能reinterpret_cast。例如:

#include <cassert>

struct X{
  int a, b, c, d;
};

struct Y{
  int arr[4];
};

int main(){
  X x{0, 1, 2, 3};
  Y& y = reinterpret_cast<Y&>(x);
  assert(y.arr[2] == 2);
}

(我希望我的例子正确; live on Ideone。)

这种方法的问题在于你需要深入研究实现的内部结构,即使在不同的版本中也可能不稳定。因此,简单地复制可能是最好的(如在大多数便携/已知/固体中)。

但有一件事:我个人不知道有问题的类型提供哪些接口,Ogre也可能提供不直接在Matrix4上运行但在(2D)阵列上运算的算法。查看API文档。