您的位置:首页 > 其它

神奇的模板-自身做自身的模板参数

2012-03-30 12:08 127 查看
实践中发现以下实现居然行得通,一向低水平的编译器此次发挥出乎意料了: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()
{
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: