1

クラスの複数のバリエーションに展開するには、可変引数マクロを使用する必要があります。マクロ入力に基づいて異なる名前を付ける必要があるため、単純にテンプレートを使用することはできません。問題は、コンマ ( ) 記号を展開できないこと,と、クラスに複数のパラメーターを取る関数があることです (そのためにはコンマ記号を使用する必要があります)。

boostコンマに展開されるマクロを提供しますBOOST_PP_COMMA()が、ループ構成の外でのみ機能します。問題は、BOOST_PP_COMMA()一度展開されてからカンマとして扱われ、その時点でプログラムが中断することだと思います。

問題を説明するために、変数の数のパラメーターを取り、それに与えられたパラメーターの数に等しい数のコンマを生成するマクロ関数があるとします。単純な解決策は次のとおりです。

#define TEST(...)\
    BOOST_PP_REPEAT( \
        BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), \
        MACRO, \
        BOOST_PP_VARIADIC_TO_TUPLE(__VA_ARGS__))

#define MACRO(z, n, data) BOOST_PP_IF(1,BOOST_PP_COMMA(),BOOST_PP_COMMA())\

ただし、コンマが展開され、マクロがパラメーターを分割していると見なすため、これによりさまざまなエラーが発生します。

この問題を回避する方法はありますか?

4

1 に答える 1