gpt4 book ai didi

c++ - Objective C 中的函数指针

转载 作者:IT老高 更新时间:2023-10-28 21:39:22 24 4
gpt4 key购买 nike

快速提问。有谁知道如何获取 objective-c 方法的函数指针?我可以将 C++ 方法声明为函数指针,但这是一个回调方法,因此 C++ 方法需要成为类的一部分以便它可以访问实例字段。我不知道如何使 C++ 方法成为 objective-c 类的一部分。有什么建议吗?

最佳答案

通常,您需要两条信息才能回调到 Objective-C;要调用的方法和调用它的对象。无论是选择器还是 IMP——instanceMethodForSelector: 结果——都不足以提供足够的信息。

大多数回调 API 提供了一个上下文指针,该指针被视为传递给回调的不透明值。这是解决您难题的关键。

即如果你有一个回调函数声明为:

typedef void (*CallBackFuncType)(int something, char *else, void *context);

还有一些使用上述回调函数类型指针的 API:

void APIThatWillCallBack(int f1, int f2, CallBackFuncType callback, void *context);

然后你会像这样实现你的回调:

void MyCallbackDude(int a, char *b, void *context) {
[((MyCallbackObjectClass*)context) myMethodThatTakesSomething: a else: b];
}

然后你会调用类似于这样的 API:

MyCallbackObjectClass *callbackContext = [MyCallbackObjectClass new];
APIThatWillCallBack(17, 42, MyCallbackDude, (void*)callbackContext);

如果您需要在不同的选择器之间切换,我建议创建一个位于回调和 Objective-C API 之间的小粘合类。粘合类的实例可以包含必要的配置或根据传入的回调数据在选择器之间切换所需的逻辑。

关于c++ - Objective C 中的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1777486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com