私はこのようなツリートラバーサルAPIを持っています
treeTraverse(Tree *ptr, (void *) call_back(Tree *ptr));
この API はツリーを走査し、各エントリでコールバック関数を呼び出します。ツリーをトラバースして関数を呼び出したい
myFunc(Tree *ptr, int a, int b)
ツリーのすべてのエントリに対してですが、上記でわかるように、コールバック関数は 1 つの引数しか受け入れないため、myFunc() をコールバック関数として登録しても機能しません。この問題を回避するにはどうすればよいですか。
可変引数を受け入れるように treeTraverse() API を書き直すのは現実的ではありません。これはフレームワーク API であり、変更する必要がある場合は、多くの人にレビューしてもらう必要があるためです。非常に小さな機能を実装するだけでよいので、私が楽しみにしていることではありません。
もう 1 つの方法は、変数 'a' と 'b' をグローバルにして、myFunc がアクセスできるようにすることです。しかし、この解決策は非常に醜く見えます。
これを回避する他の方法はありますか?