c++ - 指向 objc 类成员方法的函数指针,用于 C++?

标签 c++ ios objective-c function-pointers

我有一个用于网络(通过 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/

相关文章:

c++ - sem_open() 错误 : "undefined reference to sem_open()" on linux (Ubuntu 10. 10)

c++ - 你能把这个调试宏从 C++ 翻译成 Python 吗?

c++ - 在不破坏堆栈的情况下获取 C++ 中堆栈的总和

iphone - UILocalNotification 调用延迟

ios - 在 ios 中为 MBCalendar Kit 添加事件

ios - 无法导航到 iOS 9 中的其他屏幕

c++ - 如何将变量从 C++ 中的一个函数返回到 main,然后在另一个函数中使用它?

ios - iOS Enterprise Program 是否允许向配置文件添加授权?

ios - Objective-C语法;它是一个类别吗?

objective-c - 在 XCode 调试器中查找与错误对应的行