C++利用不定参数宏计算不定参数的个数

C++宏函数是支持不定参数的,那么如何确定不定参数的个数呢?

废话少说,直接上代码吧。

#define DBG_16TH(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, \
                      _14, _15, _16, ...)                                     \
  _16
#define DBG_NARG(...) \
  DBG_16TH(__VA_ARGS__, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)

上面这一段代码就可以利用不定参数宏函数计算输入参数的个数。

#include <iostream>
using namespace std;

#define DBG_16TH(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, \
                      _14, _15, _16, ...)                                     \
  _16
#define DBG_NARG(...) \
  DBG_16TH(__VA_ARGS__, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)
int main() {
    cout << DBG_NARG(arg1, arg2, arg3) << endl;
    cout << DBG_NARG(arg1, arg2, arg3,arg4) << endl;
    return 0;
}

上面这段程序的输出结果为:

3
4

说明不定参数宏函数DBG_NARG(...)可以根据传入的参数来自动计算参数的个数。

原理分析:

当给不定宏函数DBG_NARG(...)传入参数的时候,会将参数传递给DBG_16TH():

// DBG_NARG传入1个参数
DBG_16TH(arg1, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, \
    1, 0)   // 第16个参数为1

// DBG_NARG传入2个参数
DBG_16TH(arg1, arg2,15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, \
    2, 1, 0) // 第16个参数为2

// DBG_NARG传入3个参数
DBG_16TH(arg1, arg2, agr3, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, \
    4, 3, 2, 1, 0)  // 第16个参数为3
而DBG_16TH也是一个不定参数宏函数,并且将参数截断为第16个参数,当参数通过DBG_NARG传递
给DBG_16TH是,将15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0往后推:
传入1个参数时:DBG_16TH第16个参数为1,即获得参数个数为1
传入2个参数时:DBG_16TH第16个参数为2,即获得参数个数为2
传入3个参数时:DBG_16TH第16个参数为3,即获得参数个数为3
...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值