c++ - 将 block 从 Objective-C 传递给 C++ 方法

标签 c++ objective-c ios4 objective-c-blocks

我有一个用于 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/

相关文章:

objective-c - 具有输入数组的方法

iphone - Asihttprequest 61 错误

ios - 无法从枚举 block 将 ALAssets 添加到 NSOperationQueue

iphone - 如何创建自定义键盘

iphone - 多次按下时声音重叠

c# - iPhone 中使用 .NET 生成的公钥进行 RSA 加密?

c++ - 为什么 std::priority_queue 首先返回最大的元素但使用 std::less ?

c++ - NACL 不是加载模块吗?

c# - cmake build x64 使用安装的任何 visual studio 版本

c++ - linux后台刷卡器