#include <iostream>
using namespace std;
template <class T>
class CTest : public T
{
void
SomeMethod()
{
T *pT = static_cast<T *>(this);
pT->BaseMethod();
}
};
class CBase
{
public:
CBase(){};
~CBase(){};
void BaseMethod()
{
cout << "BaseMethod in Base " << endl;
}
};
class CMath : public CBase
{
public:
CMath(){};
~CMath(){};
void BaseMethod()
{
cout << "BaseMethod in Math " << endl;
}
};
int main()
{
CTest<CBase> *pTest = new CTest<CBase>;
pTest->BaseMethod();
CTest<CMath> *p2Test = new CTest<CMath>;
p2Test->BaseMethod();
}
使用模板来实现:静态的面向对象的方法
1、使用虚函数,动态的多态(通过虚函数,在运行时通过虚函数表指针,通过索引找到对应函数,然后进行调用)
2、使用模板,静态的多态(针对某些希望定义为static的函数,当你希望能在基类抽象方法中根据当前对象具体类型来使用子类相应static函数时)
3、利用模板实现静态的多态。 —— 使用模板定义接口,类型参数定义实现
4、由于静态多态是在编译期完成的,因此效率较高,编译器也可以进行优化;有很强的适配性和松耦合性,比如可以通过偏特化、全特化来处理特殊类型;最重要一点是静态多态通过模板编程为C++带来了泛型设计的概念,比如强大的STL库。
5、静态多态就是在系统编译期间就可以确定程序执行到这里将要执行哪个函数,例如:函数的重载,对象名加点操作符执行成员函数等,都是静态多态,其中,重载是在形成符号表的时候,对函数名做了区分,从而确定了程序执行到这里将要执行哪个函数,对象名加点操作符执行成员函数是通过this指针来调用的。