2017-05-30 15 views
3

私は多くの引数を取るマクロを持っています。そのうちの1つは型です。例えば:私はテンプレートの種類でこれをインスタンス化しようとした場合テンプレートタイプをマクロに渡す

#define macro(T,x) T x 

は、言う:

macro(Type<int,float>,var); 

意図したように、プリプロセッサは、テンプレートの何も知らないので、これは、動作しません。これは3つの引数としてそれを解析します:

macro(
    Type<int, 
    float>, 
    var 
); 

See also full example.

はこれを回避する方法はありますか?私はtypedef Type<int,float> T;を使用しましたが、別の(潜在的にグローバルな)タイプを導入することなくインラインで行うことが可能かどうか疑問に思います。

おそらくコンマはガードできますか?

+0

'__VA_ARGS__'、または' COMMA'マクロを紹介し.. – Jarod42

答えて

4

あなたは余分なマクロ導入することができる:

#define COMMA , 

、その後

macro(Type<int COMMA float>,var); 
関連する問題