Base.h
//根据模板参数生成派生类
#ifndef BASE_H_
#define BASE_H_
#include <iostream>
using namespace std;
class CBase
{
public:
CBase(){}
~CBase(){}
void BaseMethod()
{
cout<<"BaseMethod in Base"<<endl;
}
};
class CMath:public CBase
{
public:
CMath(){}
~CMath(){}
};
template <class T>
class CComObject:public T //CComObject最终通过模板参数所指定的类派生出来
{
public:
CComObject(){}
~CComObject(){}
void CallBaseMethod()
{
//把基类作为一个模板参数进行传递并使用该类型对类实现指针进行转换
T *pT=static_cast<T *>(this);
pT->BaseMethod();
}
};
#endif
main.cpp
#include "Base.h"
int main()
{
CComObject<CMath> *pMath=new CComObject<CMath>;//实例化模板对象
pMath->CallBaseMethod();
delete pMath;
return 0;
}