同じブロック型である 1 つのパラメーターを取るブロック型を宣言したいと考えています。それはちょうどこのようなものです:
typedef void (^BlockInBlock) (BlockInBlock block);
私は宣言が無効であることを知っています。しかし、同じブロックタイプのパラメーターを1つだけ取る再帰ブロックを実装する方法があるかどうか疑問に思います。
ブロックを使用して、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関数ポインターである1つのパラメーターを取り、そのC関数ポインターの関数も別のC関数ポインターを取るC関数を宣言することは可能ですか?