指向 objc 类成员方法的函数指针,用于C++
Function pointer to objc class member method, for use in C++?
我有一个用于网络的C++类(通过boost::asio(,它需要使用回调函数才能做任何有用的事情。我还有一个混合的Objective-C++项目,它利用了这个类。使用 objc 类单例,我的每个子类化UIViewController
类都能够绑定到类实现文件中定义的标准 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,它隐约等效。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 用于C++中带有数组和指针的循环
- std::byte 指针应该用于指针算术吗?
- 用于输出矩阵的二维指针
- 我正在尝试学习如何在 c++ 中传递指针,但出现错误:没有用于调用"test"的匹配函数。我做错了什么?
- 下步指针键入用于shared_ptr的级别
- 专门用于"direct"函数类型(与函数指针类型相对)
- C++模板,用于通过常量引用和原始指针传递向量
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 用于获取数组长度的指针数学
- C++ 常量用于指针指向指针
- 指针可以用于访问内存中的任何任意区域吗?
- 用于 STL 迭代器、指针和 std::nullptr_t 的模板函数
- C 何时将指针用于向量
- 如何将指针用于朋友函数作为成员函数的参数
- C 功能指针用于将QVariant转换为{自定义类型
- 传递指针 - 用于写入流
- 将指针用于多实例数组
- 如果函数调用导致引用传递,为什么要将共享指针用于字符串?
- Python传递结构体和指向c函数的指针用于输入和输出