简单的问题。将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);


当然,如您所知,宏的类型安全性不会那么高。

10-08 05:51