简单的问题。将CGPoint转换为GLKVector的最佳方法是什么?
这些结构是相同的,因此能够reinterpret_cast或memcpy或类似的东西会很好。我下面的解决方案有效,但似乎并非最佳。我在堆栈上创建一个GLKVector2,分配每个成员,然后将其作为值返回,然后将其分配给另一个GLKVector。
它不会破坏银行或其他任何东西,但是必须有一种更整洁的方法来做到这一点?
GLKVector2 Vector2FromPoint(CGPoint point)
{
GLKVector2 v;
v.x = point.x;
v.y = point.y;
return v;
}
最佳答案
您可以尝试在以下函数中使用memcpy:
bool vector2ToCGPoint(GLKVector2* s, CGPoint* d) {
memcpy(d, s, sizeof(*d));
}
但最好是:
bool copyVector2ToCGPoint(GLKVector2* s, CGPoint* d) {
d.x = s.x;
d.y = s.x;
}
如果您确实想要优化,则可以使用宏:
#define copyS2D(S,D) (D.x = S.x, D.y = S.y)
因此,您可以执行以下操作:
CGPoint b;
GLKVector2 a;
vector2FromCGPoint(a, b);
当然,如您所知,宏的类型安全性不会那么高。