您的位置:首页 > 编程语言 > C语言/C++

C++实现类似JAVA反射的基本功能

2011-03-07 11:09 871 查看
在使用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的反射功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: