関数を生成するために、次のブースト プリプロセッサ マクロがあります。
extern "C" EXPORT out name(BOOST_PP_SEQ_FOR_EACH_I(PARAMETER_LIST, 0, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)))
if__VA_ARGS__
が空でない限り、これはうまく機能します。いくつかの検索の後、BOOST_PP_VARIADIC_SIZE を__VA_ARGS__
使用して引数の数をカウントする方法を見つけました。少し考えた後、私はこのマクロを書きました:
extern "C" EXPORT out name(BOOST_PP_IF(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), BOOST_PP_SEQ_FOR_EACH_I(PARAMETER_LIST, 0, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)), void))
これでうまくいくと思いますが、次の警告が表示され続けます
warning C4002: too many actual parameters for macro 'BOOST_PP_IIF_1'
これは警告ですが、それでもプリプロセッサが壊れているようです。複数の引数を渡すと、最初の引数のみが処理されます。これはとても奇妙だと思います。すべてが壊れる場合、これを追加するにはどうすればよいですか?コンマと括弧を何百回もチェックしましたが、問題ないようです。このプリプロセッサを修正するにはどうすればよいですか?
http://www.boost.org/doc/libs/1_54_0/libs/preprocessor/doc/ref/if.html
編集: この回帰は関連しているようです: https://svn.boost.org/trac/boost/ticket/8606