使用递归宏来编写函数的参数

时间:2013-09-13 18:14:40

标签: c++ recursion macros

是否可以使用递归宏来编写所需数量的函数参数。例如:

void foo( const char (&row1)[3] , const char (&row2)[3] , const char (&row3)[3] )
{
}

void foo( const char (&row1)[3] , const char (&row2)[3] , const char (&row3)[3] , const char (&row4)[3] , const char (&row5)[3] , const char (&row6)[3] )
{
}

我知道引入了可变参数模板来解决这样的问题,但我仅限于C ++ 98 ATM。

3 个答案:

答案 0 :(得分:5)

您可以查看boost::preprocessor库,它为您提供了一个完整的预处理工具包。它提供了预处理器元编程工具,包括重复和递归。

您可以在this answer中看到一个示例。

答案 1 :(得分:0)

宏不能递归,因为宏扩展在扩展过程中不会扩展宏的名称。 C ++ 11确实使用__VA_ARGS__引入了具有可变数量参数的宏的概念,但我不太了解它。 (我使用很少的宏。)

答案 2 :(得分:0)

传统上,开发人员会创建一组宏,每个宏都有不同数量的参数:

#define foo1(arg1)
#define foo2(arg1, arg2)
#define foo3(arg1, arg2, arg3)
...