具有可变数量参数的C ++宏

时间:2013-09-20 05:50:55

标签: c++ macros

我想知道如何创建一个c ++宏来创建一个或在给定数量的参数之间,如

#define aMacro(arg1,arg2,arg3,arg4) arg1==arg2 || arg1==arg3 || arg1==arg4

但是有很多参数。

我知道varadic宏,我知道它们存在,我知道在SO上有一些问题,但据我所知,它们都没有解决我关于如何做||的问题一部分。

谢谢

2 个答案:

答案 0 :(得分:1)

wikipedia开始,您正在寻找的是一个可变宏:

  

可变宏是某些计算机编程语言的一个特性,   特别是C预处理器,可以声明宏   接受不同数量的论点。

     

变量参数宏于1999年在ISO / IEC中引入   9899:1999(C99)修订C语言标准,并于2011年进行   ISO / IEC 14882:2011(C ++ 11)修订版C ++语言标准。

因此它可以在C ++ 11或C99中使用。它也可以作为某些编译器的扩展,例如GNU GCC支持它,我想我也读过VC ++。

然后,对于语法,请查看this帖子,例如,这给出了一个简单的例子:

#define FOO(fmt, ...) printf(fmt, ##__VA_ARGS__)

答案 1 :(得分:1)

希望你可以在这里找到一个非常优秀的宏替代方案,也许你并不知道。这使用variadic templates,这需要C ++ 11。但是如果你想要可变参数宏,那么它也需要C ++ 11。

template<typename T>
bool func(T const&)
{
    return false;
}

template<typename L, typename R, typename... Args>
bool func(L const& lhs, R const &rhs, Args const&... args)
{
    return (lhs == rhs) || func(lhs,args...);
}
相关问题