static_cast在ATL中很常见.它是实现模版形式多态的关键.
2008-01-16 07:15
218 查看
static_cast在ATL中很常见.它是实现模版形式多态的关键.
比如:
template <class T>
class CTest:public T
{
....
void SomeMethod()
{
T *pT = static_cast <T*> (this);
pT-> BaseMethod();
}
};
初看很迷惑,既然CTest继承自T,直接调用T中BaseMethod()不就行了.为什么作 "T *pT = static_cast <T*> (this); "这样的转换?
其实,这正是模版方式实现多态的关键.
先看看类的实现:
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;
}
};
CBase和CMath都实现了BaseMethod().
CTest <CBase> *pTest = new CTest <CBase> ;
pTest-> BaseMethod(); ----> 调用CBase的BaseMethod();
CTest <CMath> *pTest = new CTest <CMath> ;
pTest-> BaseMethod(); ----> 调用CMath的BaseMethod();
由此可见,利用模版技术实现多态,就需要通过类似
template <class T>
class CTest:public T
{
...
}
这样的模版类.
这种类起初看起来怪怪的,但很关键.
比如:
template <class T>
class CTest:public T
{
....
void SomeMethod()
{
T *pT = static_cast <T*> (this);
pT-> BaseMethod();
}
};
初看很迷惑,既然CTest继承自T,直接调用T中BaseMethod()不就行了.为什么作 "T *pT = static_cast <T*> (this); "这样的转换?
其实,这正是模版方式实现多态的关键.
先看看类的实现:
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;
}
};
CBase和CMath都实现了BaseMethod().
CTest <CBase> *pTest = new CTest <CBase> ;
pTest-> BaseMethod(); ----> 调用CBase的BaseMethod();
CTest <CMath> *pTest = new CTest <CMath> ;
pTest-> BaseMethod(); ----> 调用CMath的BaseMethod();
由此可见,利用模版技术实现多态,就需要通过类似
template <class T>
class CTest:public T
{
...
}
这样的模版类.
这种类起初看起来怪怪的,但很关键.
相关文章推荐
- static_cast在ATL中很常见.它是实现模版形式多态的关键.
- 使用React的static方法实现同构以及同构的常见问题
- JAVA知识回顾-5(Interface与abstract类的介绍、Static class与not static class的区别、java多态的实现原理、Thread与Runable)
- 多态的实现方式,继承与模版函数
- ATL实现中,模版技术的使用
- opencv实现多图像读取并显示,sprintf_s函数,static_cast
- 使用React的static方法实现同构以及同构的常见问题
- C++模板--ATL利用其实现多态
- 【C++专题】virtual函数实现的多态、RTTI(dynamic_cast,typeid)、vtable中类型信息
- 分别基于虚函数和模版方式实现的多态
- 【题目】static_cast在ATL当中的应用
- static不实现多态
- opencv实现多图像读取并显示,sprintf_s函数,static_cast
- 内存中的static、const实现形式
- Python实现自定义函数的5种常见形式分析
- 理解ATL中的ATLNOTABLE和模板实现不带虚函数表之多态
- javascript多态 - 类形式实现demo
- EffectiveC++,实现(2)static_cast,dynamic_cast,const_static,reinterpret_cast
- ATL-Style模板 不用虚函数实现 多态
- static_const配合void*实现的多态