将模板类型传递到宏中

时间:2017-05-30 17:21:56

标签: c++ macros comma

我有一个带有许多参数的宏,其中一个是一个类型。例如:

#define macro(T,x) T x

如果我尝试使用模板类型对其进行实例化,请说:

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

这不会按预期工作,因为预处理器对模板一无所知。它会将其解析为三个参数:

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

See also full example.

有解决方法吗?我使用了typedef Type<int,float> T;,但我想知道是否可以在不引入另一种(可能是全局的)类型的情况下进行内联。

也许可以保护逗号?

1 个答案:

答案 0 :(得分:5)

您可以引入额外的宏:

#define COMMA ,

然后

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