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