如何取得类成员的名称?
比如我有一个自定义的类
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
/* 获取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; }}