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: