C++中模板与多态的思考

开发中遇到个问题,问题如下:
有7中类型的信息,每个类型有相同的地方,也有不用之处,但是类内函数都一样。
最开始考虑用模板实现,因为类内函数一样,于是写完,编译,报错,查问题。
发现模板函数不能在cpp文件中实现,要将实现与定义都放在.h文件中。为什么?
这是因为

模板实例化是发生在编译期(Compile-time)的

后面提交项目后,自己在家改版:
将7中信息相同的属性归为基类,再继承出7种派生类,基类函数定为虚函数,采用多态实现派生类每个同名函数不同作用。
这样别人调接口时,只需要实例化好7种类型中的任意一个,直接作为参数传入我写好的接口中(传入之前最好用static_cast强转一下,为了安全起见)。

于是这里产生的疑问有:模板和多态的区别?什么情况下用多态比较好、什么情况下用模板比较好呢?

表面上看:模板与多态本身就是两个东西。模板实例化是发生在编译期(Compile-time)的,而多态中的函数调用决议是发生在运行时(Run-time)。
实际上:模板是静多态,模板是在编译时确定的,而平时我们说的多态是动多态,是在运行时确定。也就是多态分为两种:静多态和动多态。

其实可以很简便的理解为:模板是“多对一”,多态是“一对多”。
用函数来举例:
“多对一”:无论参数是什么类型,这个函数都使用
“一对多”:每个类型的实例都需要自己去实现虚函数,借由虚函数列表,多态会自动找到对应的同名函数并调用。

猜你喜欢

转载自blog.csdn.net/swh1993316/article/details/85159957
今日推荐