设为首页 加入收藏

TOP

C++实现类似Java反射的基本功能
2014-11-24 02:31:51 来源: 作者: 【 】 浏览:1
Tags:实现 类似 Java 反射 基本 功能

在使用C++的时候,有时想通过输入的成员名字得到相应取值的功能,也就是想实现类似JAVA语言自备的反射功能。下面是我自己想到的一个比较方便的实现,仅作记录。


首先实现一个自动代码生成器:


将中间语言转化为C++语言,如下为中间语言可能的定义:


Class CInterLangTrans {


int32 i32Trans;


String sTrans;


}



编译之后产生的代码:


Class CInterLangTrans {


private:


int iMemberNum = 2;


int m_i32Trans;


string m_sTrans;




/*


* 如下为可能的类型定义:


* typedef void (* FuncPtr)(void*, const void*);


* Struct CTypeMemberInfo {


* int m_i32MemberType;


* char* m_szMemberName;


* FuncPtr m_funcPtr;


* };


*/


CTypeMemberInfo cTypeMemberInfo[3] = {


{INT32,"i32Trans",reinterpret_cast(pFunc4INT32)},


{STRING,"sTrans",reinterpret_cast(pFunc4STRING)},


{-1,0}


};



public:


void getAddressTable(const void* pTable[iMemberNum])


{


int i = 0;


pTable[i++] = &m_i32Trans;


pTable[i++] = &m_sTrans;


}



//由成员名字返回成员结构指针


//实现省略


CTypeMemberInfo* getTypeMemberInfo(string sMemberName);



}



//具体使用


//如下pInfo,pField取值步骤省略



CTypeMemberInfo* pInfo;


char* pField;


//如下模拟取得相应成员i32Trans的值


int pData;


(*pInfo->m_funcPtr)(&pData, pField);


好了,只是一个简单的想法,通过代码生成器完成大部分的工作,这样应该是可以支持类似JAVA的反射功能。


推荐阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇基于Hadoop实现通用的并行任务处理 下一篇Step By Step(Lua调用C函数)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: