一般如果要在父类中调用子类的函数,可以在父类中先申明此函数是虚函数,但由于模板与虚函数不能共存,那如何用模板的方法达到同样的功效呢。
首先要设立一个模板参数,让它代表任意子类,再使用类型转换,在调用函数时把父类转换为子类。
举例:
#include <iostream>
using namespace std;
template<class ff>
class a
{
public:
void print(int a){cout<<"This is a "<<endl;}
void right1(){int c=0;ff& p = static_cast<ff&>(*this);p.print(c);}
};
class b:public a<b>
{
public :
void print(int a){cout<<"This is b "<<endl;}
void right(){right1();}
};
int main()
{
b bt;
bt.right();
}