4

我使用 iphone SDK 并主要在 C++ 中进行编码,同时在 obj-c 中使用部分 SDK。在需要 obj-c 类的情况下是否可以指定 C++ 类?例如:

1) 将委托设置为 obj-c 对象时。

  • 我不能让 C++ 类从 Delegate 协议派生,所以这个以及可能的其他原因阻止我让我的 C++ 类成为各种 obj-c 对象的委托。我作为解决方案所做的是创建一个包含指向 C++ 类的 ptr 并用作委托的 obj-c 适配器类(在调用它时通知 C++ 类)。每次我需要将委托通知发送给 C++ 类时,编写这些感觉很麻烦。

2) 设置选择器时

  • 这与第 1 项密切相关。假设我想设置一个回调以在完成某些操作时触发,例如按下按钮或 UIView 动画功能中的 setAnimationDidStopSelector。如果能够为 setAnimationDelegate 指定一个 C++ 函数以及相关委托,那就太好了。

好吧,我怀疑这不太可能,但如果有人对如何做到这一点有任何建议,或者如何更容易地编写这些东西,我很想听听他们的意见。谢谢。

4

1 回答 1

1

可悲的消息是您无法完全绕过适配器,您可以轻松完成这项工作。通过使用 Objective-C 运行时库,您可以使用声明性方法为您生成适配器,从而减少混乱。

Objective-C 运行时允许您在运行时构造类,您可以为其设置方法的实现函数。因此,使用模板,您可以通过生成调用所需 C++ 方法的蹦床函数,从面向类型的声明中生成 Objective-C 类。

不久前我开始了一个原型,在你的情况下提到的状态可能就足够了。可以更好地做到这一点并干净地支持属性和分布式对象,但我还没有找到时间来实现更好的版本。

于 2010-05-26T01:06:04.763 回答