#include <IOSTREAM>
template<class T>
class CComObject:public T
{
public:
CComObject(){};
~CComObject(){};
void CallBaseMethod(){
T* pT=static_cast<T *>(this); //this 指向CComObject 被static_cast<>转换成了T类型,从而实现了对T,也就是CMath中的方法的调运CMath::BaseMethod
pT->BaseMethod();
}
};
class CMath
{
public:
CMath(){};
~CMath(){};
void BaseMethod()
{
std::cout<<"BaseMethod in CMath"<<std::endl;
}
};
/*CComObject是一个模板类,他可以通过模板参数,<CMath>
和 T* pT=static_cast<T *>(this); pT->BaseMethod();来调运CMath的方法实现 模板累的继承,不用虚函数以提高效率
*/
void main()
{
CComObject<CMath>* pMath=new CComObject<CMath>;
pMath->CallBaseMethod();
}
————————————————
版权声明:本文为CSDN博主「sshhaayyuuee」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sshhaayyuuee/article/details/6828915
ATL模板原理
最新推荐文章于 2022-02-28 16:39:49 发布