例如,我有一个 QMatrix4x4,我有一个 Ogre::Matrix4。
从QMatrix到Ogre::Matrix4来回转换有点繁琐,想知道有没有靠谱的解决方案?
现在我只是在 for 循环中复制每个元素,有什么建议吗?
例如,我有一个 QMatrix4x4,我有一个 Ogre::Matrix4。
从QMatrix到Ogre::Matrix4来回转换有点繁琐,想知道有没有靠谱的解决方案?
现在我只是在 for 循环中复制每个元素,有什么建议吗?
在 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 文档。