2

重複の可能性:
マクロで使用されるテンプレートパラメータの問題

の構造を変更せずにこれを機能させる方法を見つけようとしていますINHERIT

#define INHERIT(t) foo<t>
template<typename A, typename B>
struct bar : INHERIT(bar<A, B>) {};

問題は、の呼び出しにINHERITコンマが含まれていることです。

古いコンパイラをサポートしようとしているので、可変個引数のマクロとテンプレートエイリアスはオプションではありません。これを修正する方法はありますか?

4

1 に答える 1

1

少しトリッキーなマクロを使用します。

#define A2(t1,t2) t1,t2
#define A3(t1,t2,t3) t1,t2,t3
#define A4(t1,t2,t3,t4) t1,t2,t3,t4
#define INHERIT(t) foo< t >
template<typename A, typename B>
struct bar : INHERIT(bar<A2(A, B)>) {};

これらのマクロにより、プリプロセッサはコンマを構文として処理しなくなります。コンマは引数の一部として処理され始めます。

別の方法:

#define bar_A_B bar<A,B>
template<typename A, typename B>
struct bar : INHERIT(bar_A_B) {};


これらの例は、以下がないとコンパイルされません。

template <class T>
class foo {};
于 2012-11-03T10:58:39.363 に答える