Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / C++实现类似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<FuncPtr>(pFunc4INT32)},              {STRING,"sTrans",reinterpret_cast<FuncPtr>(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的反射功能。推荐阅读:Java类类型的存储特点 http://www.linuxidc.com/Linux/2013-10/91073.htmJava中两种单例模式小结 http://www.linuxidc.com/Linux/2013-05/84751.htm单例模式(Singleton Pattern) http://www.linuxidc.com/Linux/2012-09/70555.htmJava单例模式实例---读取配置文件 http://www.linuxidc.com/Linux/2012-01/51149.htmJava单例模式(Singleton) http://www.linuxidc.com/Linux/2012-01/51148.htm