C++ 技巧之【宏定义重载】---- 一种比 Macro 更好的方式

本文探讨了C++中如何实现宏定义重载,以解决传统Macro在参数个数不同情况下的局限性。通过转换FIGHT宏为FIGHT1或FIGHT2等,分别对应不同参数数量,实现类似函数重载的效果。
摘要由CSDN通过智能技术生成

C++ 技巧之【宏定义重载】---- 一种比 Macro 更好的方式

背景

我们期望同样名字的宏针对不同个数的参数做出不同的反应,例如

#define FIGHT(arg) WithOne(arg)
#define FIGHT(arg_one, arg_two) WithTwo(arg_one, arg_two)

(注意:传统的 Macro 方法对于某些宏嵌套宏的情况具有限制,下面的方法是一种更为通用的实现)
但本身这段代码在 C/C++ 的编译器中是编译不过的,编译器是不允许宏的参数重载的
因此我们会想到或许我们可以通过以下路径解决上述问题

  1. 通过代码将 FIGHT(arg) 转化为 FIGHT1(arg);
    FIGHT(arg_one, arg_two) 转化为 FIGHT2(arg_one, arg_two)
  2. 定义 FIGHT1(arg) 为 With One; FIGHT2(arg_one, arg_two) 为 WithTwo(arg_one, arg_two)

实现

#define __NARG__(...) __NARG_I_(__VA_ARGS__, __RSEQ_N())
#define __NARG_I_(...) __ARG_N(__VA_ARGS__)
#define __ARG_N
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值