我想知道如何创建一个c ++宏来创建一个或在给定数量的参数之间,如
#define aMacro(arg1,arg2,arg3,arg4) arg1==arg2 || arg1==arg3 || arg1==arg4
但是有很多参数。
我知道varadic宏,我知道它们存在,我知道在SO上有一些问题,但据我所知,它们都没有解决我关于如何做||的问题一部分。
谢谢
答案 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...);
}