私は呼び出しマクロに取り組んでいます、
#define CALL(f,...) FN(f)->call((ref(new LinkedList()), __VA_ARGS__))
呼び出されたとき、
CALL(print,2,3,4,5);
リンクされたリストに 2 3 4 5 を追加し (, はそのためにオーバーロードされます)、print を呼び出します。これは、引数を必要としない呼び出しがいくつかあるにもかかわらず、期待どおりに機能するリンクされたリストを期待します。
CALL(HeapSize);
それでもリンクされたリストが必要ですが、空のリストは機能しません。どちらのスタイルでも機能するマクロを考え出そうとしていますか?
編集: gcc ドキュメントを掘り下げると、 VA_ARGSの前に ## を追加すると、引数がない場合に が削除されることがわかりましたが、それではマクロをネストできません。
CALL(print,CALL(HeadSize));
これにより、CALL not defined エラーが発生しますが、呼び出しを分離すると機能します