实践中发现以下实现居然行得通,一向低水平的编译器此次发挥出乎意料了:class Entity_Logic: public Entity_Interface< Entity_Logic, Res_Logic >
/****************************** * 文件名: Res_Interface.h * 创建人: 陈泽丹/Clark * 创建时间: 20120330 * 文件描述: ******************************/ #pragma once template<class TMP_TYPE> class Res_Interface { public: virtual ~Res_Interface(){} Res_Interface(){} bool Add(TMP_TYPE* _pType){ return true; } void Del(TMP_TYPE* _pType){} };
/****************************** * 文件名: Entity_Interface.h * 创建人: 陈泽丹/Clark * 创建时间: 20120330 * 文件描述: ******************************/ #pragma once template< class TMP_THIS, class TMP_RES> class Entity_Interface { public: virtual ~Entity_Interface(){ m_pRes->Add( GetClass() ); } TMP_THIS* GetClass(){ return (TMP_THIS*)this; } protected: Entity_Interface(TMP_RES* _pRes):m_pRes(_pRes){ m_pRes->Del( GetClass() ); } private: TMP_RES* m_pRes; };
/****************************** * 文件名: Res_Logic.h * 创建人: 陈泽丹/Clark * 创建时间: 20120330 * 文件描述: ******************************/ #pragma once #include "Res_Interface.h" #include "Entity_Logic.h" class Entity_Logic; class Res_Logic:public Res_Interface< Entity_Logic > { public: Res_Logic(void); virtual ~Res_Logic(void); };
#include "Res_Logic.h" Res_Logic::Res_Logic(void) { } Res_Logic::~Res_Logic(void) { }
/****************************** * 文件名: Entity_Logic.h * 创建人: 陈泽丹/Clark * 创建时间: 20120330 * 文件描述: ******************************/ #pragma once #include "Entity_Interface.h" #include "Res_Logic.h" class Res_Logic; class Entity_Logic: public Entity_Interface< Entity_Logic, Res_Logic > { public: Entity_Logic( Res_Logic* _pRes_Logic); virtual ~Entity_Logic(); void RecvCmd(const int _iCmd){ } };
#include "Entity_Logic.h" Entity_Logic::Entity_Logic( Res_Logic* _pRes_Logic): Entity_Interface< Entity_Logic, Res_Logic >(_pRes_Logic) { } Entity_Logic::~Entity_Logic() { }