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

C++ macro with a variable number of arguments

本文关键字:数数 变参 C++      更新时间:2023-10-16

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

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

但有可变数量的参数。

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

谢谢

从维基百科中,您正在寻找的是一个可变参数宏:

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

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

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

然后对于语法,例如看看这篇文章,它给出了一个简单的例子:

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

希望你对这里可能你不知道的宏的优越替代方案持开放态度。 这使用可变参数模板,这需要 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...);
}