C++中有兩種多態: 動多態(運行期多態)和靜多態(編譯期多態),而靜多態主要通過模板來實現,宏也是實現靜多態的一種途徑。
模板不採用虛函數機制,所以所有調用在編譯期就可確定,因此它是靜態的。
動多態
基於繼承和虛函數,多態的設計思想主要在於:對於幾個相關對象的類型,確定它們之間的一個共同功能集;然後在基類中,把這些共同的功能聲明爲多個虛函數接口。每個具體類都派生自基類,生成了具體對象之後,客戶端代碼就可以通過基類類型的引用或指針來操作這些對象,並且能夠通過這些引用或者指針來實現虛函數的調度機制。也就是說,利用一個基類類型的指針或者引用來調用虛成員函數,實際上將可以調用具體類對象的相應成員。這種動多態是C++程序設計裏面最常見的。
靜多態
模板也能夠被用於實現多態。 編譯期間實現。
例子:
class Circle
{
public:
void draw() const;
...
};
class Line
{
public:
void draw() const;
...
};
....
//
//上面兩個類的使用:
//
template <typename GeoObj>
void myDraw(GeoObj const& obj) // GeoObj是模板參數
{
obj.draw(); // 根據對象的類型調用相應的draw()
}
......
int main()
{
Line l;
Circle c;
myDraw(l);
myDraw(c);
c++ 模板技術的實現
https://blog.csdn.net/lianhunqianr1/article/details/79966911
Ref: