C++ 实现反射


 

不多说了,直接上代码吧!

定义:


typedef CReflexBase* (*Fun_Create)() ;
class CReflexBase
{
	static std::map<string, Fun_Create> stmapReflex;
public:
	CReflexBase(){};
	virtual ~CReflexBase(){};
	static bool RegisterCreator(string name, Fun_Create func)
	{
		stmapReflex[name] = func;
		return true;
	}

	static CReflexBase* Create(string name)
	{
		Fun_Create p = stmapReflex[name];
		if(p)
		{
			return p();
		}
		else
		{
			return NULL;
		}
	}
};
std::map<string, Fun_Create> CReflexBase::stmapReflex;

#define START_REFLEX_CLASS(cls,base)\
class cls:public base\
{\
public:\
	static CReflexBase* Create()\
	{\
		return new cls;\
	}\
 


#define END_REFLEX_CLASS(cls)\
};\
static bool blRegister##cls=CReflexBase::RegisterCreator(#cls,cls::Create);






用法:


START_REFLEX_CLASS(CTest1, CReflexBase)
virtual void Printf()
{
    cout << typeid(*this).name() << endl;
}
END_REFLEX_CLASS(CTest1)

START_REFLEX_CLASS(CTest2, CTest1)
virtual void Printf()
{
    cout << typeid(*this).name() << endl;
}
END_REFLEX_CLASS(CTest2)

int _tmain(int argc, _TCHAR* argv[])
{
    CReflexBase* pTest1 = CReflexBase::Create("CTest1");
    CReflexBase* pTest2 = CReflexBase::Create("CTest2");
    ((CTest1*)pTest1)->Printf();

    ((CTest1*)pTest2)->Printf();

    return 0;
}





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值