Значит, вы просто не совсем знакомы с синтаксисом блоков? Если да, вот краткий пример, который, надеюсь, будет иметь смысл, если вы уже знакомы с указателями на функции (синтаксис более или менее такой же, но с использованием ^
для объявления одного [создание замыкания, конечно, разные]).
Вы, вероятно, захотите настроить typedef для типов блоков, чтобы не повторять одно и то же снова и снова, но я включил примеры как для использования typedef, так и для простого помещения самого типа блока в параметры.
#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;
}
person
Community
schedule
19.05.2011