首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎么取得类成员的名称

2012-10-19 
如何取得类成员的名称?比如我有一个自定义的类class TXJDB : public TPersistent{public:__fastcallTXJDB(

如何取得类成员的名称?
比如我有一个自定义的类

class TXJDB : public TPersistent
{
  public:
  __fastcall TXJDB();
  __fastcall ~TXJDB();
   
  AnsiString PointName;
  AnsiString StateV;
  .....
}

因为要写一个映射关系,我想取得成员的名称来判断,怎么实现?简单来说就是怎么获得类成员的名称,谢谢!

[解决办法]
BCB没有反射,要做的话可以用工厂如:
if (name == "bbb.aaa") {
new bbb.aaa();
}
[解决办法]
CB用RTTI应该可以吧,TRttiType.GetMethods

[解决办法]
给你一个我以前用过的函数,希望可以帮到你,因为已经太久了,我一时也很难完整的解释,CB里不仅可以获得名称,还可以获取类型以及默认值等信息,但似乎只对__property修饰的属性值起作用,好好研究一下typinfo.pas

C/C++ code
/* 获取bool类型的权限属性名称和其默认值 */void __fastcall TPermission::GetProperties(TMetaClass *AClass,TStrings *AStrings){                              PTypeInfo tInfo = PTypeInfo(AClass->ClassInfo());    short pCount = GetTypeData(tInfo)->PropCount;    if (pCount == 0) return;    //PPropList pList = new PPropInfo[pCount];    Typinfo::TPropList pList;    try {        #ifdef CBUILDER6            GetPropInfos(tInfo,pList);        #else            GetPropInfos(tInfo,&pList);    #endif        TTypeInfo *pti;        String pname,pdef;        AStrings->Clear();    for (int i = 0;i < pCount;i++) {        pti = *(pList[i]->PropType); //属性类型        pname = AnsiString(pList[i]->Name); //属性名        pdef = IntToStr((int)pList[i]->Default);        if (SameText(AnsiString(pti->Name),"bool"))                AStrings->Add(pname + "=" + pdef);        }    }    __finally {        //delete [] pList;    }} 

热点排行