模板编程也称泛型编程,是C++的一个非常重要编程模式,泛型编程能以让开发者以尽可能少的代码,实现非常非常多的功能。很多时候,我们为了解耦合,往往会使用多态将实现和使用分离,实际上,模板编程序也能实现同样的效果,而且比使用多态更加安全,性能也更好。
泛型编程不同于多态,泛型编程实质是在代码的编译期间由编译器自动生成模板相关的代码,而多态则是在程序执行期间进行动态绑定。
下面我们通过用泛型编程的方式重写上节教程中的图形渲染框架
// 立方体
class Cube {
public:
void draw();
};
// 球体
class Sphere {
public:
void draw();
};
// 圆柱体
class Cylinder {
public:
void draw();
};
class Renderer {
public:
template<class Object>
void draw() {
Object object; // 创建模板对象,可以是立方体、球体、圆柱体等等
object.draw(); // 渲染(模板对象需要有draw方法,否则编译不通过)
}
};
int main() {
Renderer render;
render.draw<Cube>(); // 渲染立方体
render.draw<Sphere>(); // 渲染球体
render.draw<Cylinder>(); // 渲染圆柱体
return 0;
}
同样的,如果我们需要新增一个四面体,则只需要新定义一个Tetrahedron类即可,其它代码不需要改动
// 四面体
class Tetrahedron {
public:
void draw();
};
可以看出,相比较于上节的多态实现方案,泛型编程的实现更加精简,不仅没有使用继承,而且在Renderer渲染图形的时候,也不需要在外部new和delete对应的图形类了。
其实这仅仅只是泛型编程的冰山一角,泛型编程的真正强大之处远不于此,有兴趣可以参考《C++设计新思维》了解相关知识。