我想知道如何创建一个 C++ 宏,它可以在给定数量的参数之间创建一个或之间,比如
#define aMacro(arg1,arg2,arg3,arg4) arg1==arg2 || arg1==arg3 || arg1==arg4
但是具有可变数量的参数。
我知道 varad 宏,我知道它们存在,并且我知道在 SO 上有一些关于它的问题,但据我所知,它们都没有解决我关于如何执行 || 的问题 部分。
谢谢
希望您对这里可能没有意识到的宏的优越替代品持开放态度。这使用可变参数模板,这需要 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...);
}
从wikipedia,您正在寻找的是一个可变参数宏:
可变参数宏是一些计算机编程语言的一个特性,尤其是 C 预处理器,其中一个宏可以被声明为接受不同数量的参数。
可变参数宏于 1999 年在 C 语言标准的 ISO/IEC 9899:1999 (C99) 修订版和 2011 年在 C++ 语言标准的 ISO/IEC 14882:2011 (C++11) 修订版中引入。
所以它在 C++11 或 C99 中可用。它也可以在某些编译器上作为 en 扩展使用,例如 GNU GCC 支持它,我想我也读过那个 VC++。
然后对于语法,例如看看这篇文章,它给出了一个简单的例子:
#define FOO(fmt, ...) printf(fmt, ##__VA_ARGS__)