我有一个用于网络(通过 boost::asio)的 C++ 类,它需要使用回调函数才能执行任何有用的操作。
我还有一个使用此类的混合 Objective-C++ 项目。
使用 objc 类单例,我的每个子类 UIViewController
类都能够绑定(bind)到类实现文件中定义的标准 C/C++ 方法,这些方法又通过单例调用它们各自的类成员方法实例:
@interface MyViewControllerClass ()
+ (instancetype)Instance;
@end
MyViewControllerClass *_MyViewControllerClass_Instance;
void cppCallback() {
// This method gets called from the C++ class
[[MyViewControllerClass Instance] objcCallback];
}
@implementation MyViewControllerClass
+ (instancetype)Instance {
return _MyViewControllerClass_Instance;
}
- (void)viewDidLoad
{
_MyViewControllerClass_Instance = self;
// Pass &cppCallback to the C++ class here, so it can be called later
}
- (void)objcCallback {
;// Do something here
}
@end
尽管它看起来很丑陋,但它在过去工作得很好。但现在我又碰壁了……
我需要在 UICollectionViewCell
子类中使用 C++ 网络类,其中会有许多实例......这意味着使用单例将不起作用。
那么如何将指向 objc 类方法的指针作为 C++ 参数传递?
为我的 C++ 网络类编写完整的 Objective-C 包装器类是我唯一的选择吗?
最佳答案
“函数指针”在这里是不可能的,因为你不能使用函数指针来调用实例方法(除非你用函数指针传递实例)。
但是,您可以创建一个可调用对象。
struct Callback {
MyViewControllerClass *instance;
void operator()() {
[instance objcCallback];
}
};
您也可以使用 C++ lambda,这大致等效。
关于c++ - 指向 objc 类成员方法的函数指针,用于 C++?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43301656/