实践中发现以下实现居然行得通,一向低水平的编译器此次发挥出乎意料了: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()
{
}

本文探讨了一次不寻常的编译器体验,展示了类模板在实现特定功能时的灵活性与效率。通过实例分析,揭示了类模板在面向对象编程中的强大应用,并解释了其背后的原理。

被折叠的 条评论
为什么被折叠?



