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

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


 

你可能感兴趣的:(神奇的模板-自身做自身的模板参数)