C++模板的实现本质类似于宏替换

来源:互联网 发布:前端后端区别知乎 编辑:程序博客网 时间:2024/05/16 06:30

最近看C++模板看得头疼,C++就是复杂啊。正因为强大,功能多,才会复杂。一个类模板的继承问题我搞了半天才明白。最后发现一点:C++模板的实现本质类似于宏替换!记住这点后,便豁然开朗,接下来看模板内容,有如神助。

我们来看这段代码,我们定义个函数模板:

template <class Type>void Swap(Type &T1,Type &T2){Type temp = T1;T1 = T2;T2 = temp;}

这段再简单不过了,如果我们不用模板,要怎么实现让这个交换函数能交换所有的数据类型呢?

我们这样来写代码:

#define Type intvoid Swap(Type &T1,Type &T2){Type temp = T1;T1 = T2;T2 = temp;}

OK,实现了,如果想让这个交换函数支持什么数据类型,就改一下#define Type int即可,比如#define Type char后我们的交换函数就能交换char类型数据了。

那么现在就比较好理解了吧,模板的本质,就是自动的帮我们完成了这么一个宏替换的过程。当我们调用函数模板时,根据我们传入的数据类型,比如我们传入int类型变量,它就自动把函数模板中的Type替换成int,然后调用。

总结下来区别就是,模板的替换过程是自动、局部的,#define宏的替换过程是手动、全局的。模板的实现本质实际上就是数据类型的替换。理解了这点以后,再来看模板,就简单了。