7

我最近开始开发一款 iOS 游戏,并决定用 C++ 编写该项目的一个独特部分。只要Objective C 类简单地访问一些成员或调用C++ 对象上的函数,这种方法似乎就可以正常工作。但是,我似乎找不到一种优雅的方式来让我的 Objective C 类响应 C++ 类中的“事件”。任何使用回调的事件处理系统似乎都是不可能的(因为 Objective C 方法和 C++ 函数并且可能不可互换)。我能想到的只是使用委托模式并围绕我的 C++ 委托类编写包装类,以便我可以在 Objective C 代码中使用它们。所以我的问题是:有没有更好的方法来做到这一点?

注意:我想避免在我的 C++ 文件中直接使用 Objective C,因为这些类应该是平台独立的。

4

2 回答 2

4

您可能需要考虑 CoreVideo 使用的机制。

在他们的模型中,他们有一种涉及注册 C 回调函数(http://tinyurl.com/axtxajf)的机制,并且该函数的参数之一是 void*,它可以被类型转换为 Objective-C 类你需要访问。

这是您可以在 C++ 模块中实现以注册回调函数的 C 函数示例。参数是回调函数和指向类实例的指针:

SetEventCallback(EventCallbackFunction, self);

当需要处理事件时,会调用回调函数,您可以将void*类型转换为调用Obj-C类并调用方法:

void EventCallbackFunction(void* objCPtr)
{
    [(MyObjCClass*)objCPtr someMethod];
}
于 2013-01-15T00:44:12.063 回答
1

您可以使用 C++0x lambda 函数,它们可以与 Objective-C 块互换(可相互分配)。

于 2013-01-15T08:26:58.673 回答