3

関数を生成するために、次のブースト プリプロセッサ マクロがあります。

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

4

1 に答える 1