0

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

从QMatrix到Ogre::Matrix4来回转换有点繁琐,想知道有没有靠谱的解决方案?

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

4

1 回答 1

1

在 C++11 中,如果这两种类型都是layout-compatible,你可以简单地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);
}

(我希望我的例子是对的;住在 Ideone 上。)

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

不过有一件事:我个人不知道所讨论的类型提供了哪些接口,Ogre 也可能提供不直接对 aMatrix4而是对(2D)数组进行操作的算法。检查 API 文档。

于 2012-06-17T23:04:32.077 回答