我想声明一个块类型,它采用一个相同块类型的参数。就像这样:
typedef void (^BlockInBlock) (BlockInBlock block);
我知道声明无效。但我想知道是否有任何可能的方法来实现递归块,它只接受一个相同块类型的参数。
我正在尝试寻找一种方法来使用块在 Objective-C 中实现面向方面的编程(AOP)。这是我关于如何实现它的问题。
进一步的问题1:
如何实现一个可变参数函数,该函数需要我上面描述的许多块并以 结尾nil
,并且我可以用许多块调用该函数,直到遇到 nil?它会是这样的:
@interface NSObject(AOP)
- (void) invokeBlockInBlock:(BlockInBlock) headBlock, ...{
va_list blockList;
va_start(blockList, headBlock);
// Invoke recursive blocks here until the value of va_arg(blockList, BlockInBlock) is nil
// it would be like: block1(self, block2(self, block3(self, block4(...))));
va_end(blockList);
}
@end
进一步的问题2:
如果递归块有返回值怎么办?
关于 C 语言的附加问题:
是否可以声明一个带有一个参数的 C 函数,该参数是一个 C 函数指针,并且该 C 函数指针的函数也带有另一个 C 函数指针?