跟我学C++中级篇—哑元

一、哑元

哑元,也叫哑对象,Dummy Object。哑元通常是指只出现但不承担任何功能的变量或函数,可以理解成为编程界的吉祥物。吉祥物是什么?只占位,但干不了活。它主要用于在编写代码时对一些不需要的变量或功能函数忽略处理。或许有人会问了,既然不需要处理为什么要写这些代码呢?因为这些代码可能在某些场景下是需要处理的,但又可能在某些场景下不需要这些代码,所以就得两个方面都得存在。
举个例子,在实际环境中,制作某个装水果的格子,一般按照按标准的数量制作,可实际装箱时,可能是按照重量装箱,这样,对于大一点的果子,可能就会余下几个格子,这就可以理解为哑元。

二、C++中哑元的应用

前面经常提到,计算机世界和现实世界是互相映射的,所以在C++中有哪些场景会用到哑元呢:
1、函数中的参数
它包括几种情况,一种是为保证函数签名的一致性,可能对某些参数并不需要,所以这些参数就可以使用哑元;另外一种是为匹配重载的接口,这种是为了保持重载的一致性
2、哑元函数
类似于变量,一个函数也可以整体都无作用,比如前面的模板编程中的一些处理
3、模板元编程
模板的元编程中,可能会用到一些标识处理一些具体逻辑,比如空的条件等,就可以用其来做为一种标签进行处理
4、一些特殊的用法
在C++编程中,可以使用一些属性来标记某些变量没有意义
在实际的应用,空类比较常见,同样在STL中,典型的如std::monostate,做为一个占位符,另外如tuple解析等都很容易出现这种现象。

三、例程

根据上面的情况,看一下相关的例程:

//1
void demoFunc(int id, void* dummy = nullptr);
//2
class Demo {
public:
    void doSomething() {
        // work
    }
 
    void nothing() {
        // Placeholder
    }
};
//3
struct DummyID {}; 
template <typename T>
void dowith(T data, DummyID) {  }
//4
[[maybe_unused]] DummyObj dummy; //ignore

对着例子,大家看着就非常清楚了。

四、总结

其实哑元这种概念对于C++来说可能较为生疏,不如其它一些高级语言比较常见,但其实它一直就有,只不过很多人对其并不感冒罢了。学习概念就是把理论和实践结合的第一步,只有把二者都融会贯通,才算是迈开了走向实战的步伐!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值