0

次の一連のマクロがあります。

macro_1(p1)
macro_2(p1, p2)
macro_3(p1, p2, p3)
etc.

ここで、前のものに評価される別の汎用マクロを作成したいと思います。次のようにしようとしています。

#define macro_x(...) macro_ ## BOOST_PP_VARIADIC_SIZE(__VA_ARGS__) (__VA_ARGS__)

その背後にある考え方はBOOST_PP_VARIADIC_SIZE(__VA_ARGS__)、正しい数のパラメーターに評価され、それが正しいマクロに変わるというものです。

BOOST_PP_VARIADIC_SIZE()しかし、残念ながら、が に連結された後に が評価さmacro_れ、不要なコードが発生することがわかりましたmacro_BOOST_PP_VARIADIC_SIZE

BOOST_PP_VARIADIC_SIZE最初に評価してから連結できる方法はありmacro_ますか?

4

1 に答える 1

0

これはすでにあなたのために行われていますBOOST_PP_OVERLOAD

#define macro_x(...) BOOST_PP_OVERLOAD(macro_, __VA_ARGS__)(__VA_ARGS__)

あなたが機能しない理由は、マクロを展開するために連結に遅延が必要だからです。独自に定義するのは簡単ですが、BOOST_PP_CAT既に存在します:

#define CAT_(a, b) a##b
#define CAT(a, b) CAT_(a, b)
于 2014-03-05T06:30:08.640 に答える