最近在公司的代码里面看到一种多态的形式,本质没有变化,只不过形式变了,以下是大致代码:
template <typename HANDLE, int TYPE = 0>
class CNetHandler : public HANDLE
{
public:
CNetHandler() { m_pThis = this; }
~CNetHandler() { m_pThis = NULL; }
static void TcpCreate(const char* pAddr, unsigned short nPort)
{
m_pThis->OnTcpCreated(1);
}
private:
static CNetHandler<HANDLE, TYPE>* m_pThis;
};
template <typename HANDLE, int TYPE>
CNetHandler<HANDLE, TYPE>* CNetHandler<HANDLE, TYPE>::m_pThis = NULL;
class CNetEvent
{
protected:
virtual void OnTcpCreated(int hLink){
cout << "CNextEvent::OnTcpCreated()" << endl;
}
};
m_pThis成员通过多态性原理可以访问到模板成员HANDLE中的OnTcpCreated成员