我有一个用于 Objective-C 的 C++ 助手类。我想从 View Controller (回调)向 c++ 类传递一个 block ,以便在执行它时我在主线程上并且可以更新 UI。我目前有一个类似的系统在调用函数时使用函数指针和 performSelector
。我想要一个示例,说明如何设置 c++ 变量以及如何将 Objective-C block 传递给它并从 c++ 类中调用它。
如果这不可能,你能想出另一个/更好的解决方案吗?
最佳答案
是不是你对 block 语法不完全熟悉?如果是这样,如果您已经熟悉函数指针(语法或多或少相同,但使用 ^
来声明一个 [创建当然,闭包是不同的])。
您可能想为 block 类型设置一个 typedef 只是为了避免自己一遍又一遍地重复相同的事情,但我提供了使用 typedef 和只是将 block 类型本身放入参数中的示例。
#import <Cocoa/Cocoa.h>
// do a typedef for the block
typedef void (^ABlock)(int x, int y);
class Receiver
{
public:
// block in parameters using typedef
void doSomething(ABlock block) {
block(5, 10);
}
// block in parameters not using typedef
void doSomethingToo(void (^block)(int x, int y)) {
block(5, 10);
}
};
int main (int argc, char const *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Receiver rcv;
// pass a block
rcv.doSomething(^(int x, int y) { NSLog(@"%d %d", x, y); });
rcv.doSomethingToo(^(int x, int y) { NSLog(@"%d %d", x, y); });
[pool drain];
return 0;
}
关于c++ - 将 block 从 Objective-C 传递给 C++ 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6014201/