模闆程式設計也稱泛型程式設計,是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++設計新思維》了解相關知識。