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的反射功能。
首先实现一个自动代码生成器:
将中间语言转化为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的反射功能。
相关文章推荐
- C++中实现类似java中接口的功能
- Java实现类似C/C++中的__FILE__、__FUNC__、__LINE__等,主要用于日志等功能中。
- Delphi中实现C++/Java类似静态变量的功能
- C++实现类似JAVA的反射
- C++实现类似JAVA的反射 .
- Delphi中实现C++/Java类似静态变量的功能
- C++中如何实现类似JAVA中的反射
- java中实现类似函数指针的功能
- java中实现类似函数指针的功能
- C语言中实现通用双链表(类似C++模版的功能)
- java实现类似百度文库功能
- C++实现顺序栈的基本功能
- C++实现顺序栈的基本功能
- c++中string类的基本功能的实现(1)
- c++中string类的基本功能的实现(1)
- 康威生命游戏 第一部分-基本功能实现(C++ & Windows SDK)
- 用java代码写的简易计算器(可以实现基本的加减乘除功能)
- Java学习笔记之 swing 基本实现QQ截屏功能
- 关于JavaWeb如何实现用户类似站内信功能
- 自编Java版记事本(基本功能实现,界面尚可)