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类类型的存储特点

Java中两种单例模式小结

单例模式(Singleton Pattern)

Java单例模式实例---读取配置文件

Java单例模式(Singleton)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/bb207a5e0864568a358979692253ba70.html