您的位置:首页 > 其它

BCB运行期取得Enum(枚举)类型信息

2004-06-25 15:22 393 查看
由于Pascal和C++的本质区别,在Delphi里面强大的RTTI功能,BCB中就被相对弱化了很多。
不过即便如此,BCB仍然可以享受TObject带来的好处,
虽然我们不能够直接使用在delphi下十分方便的GetEnumName。 我们还是不需要为每个枚举类型实现一个静态的String列表。 考虑一下如下的宏实现,为了享受TObject的好处,我们需要从它继承一个VCL子类, 并且为这个类声明一个属性,使得我们可以使用GetPropInfo来取得ENUM类型信息。
#include <TYPINFO.HPP> #define Marco_PrepareEnumerateName(ENUM) / class ___TEnumObject___ : TObject / { / ENUM _se; / __published: / __property ENUM Prop ={read=_se}; / }; / AnsiString GetEnumName(const ENUM& value) / { / / PPropInfo aPropInfo = GetPropInfo(__typeinfo(___TEnumObject___), "Prop"); / if (aPropInfo) / { / return GetEnumName(*(aPropInfo->PropType), int(value)); / } / return ""; / } 有了这个宏的实现,使得将来取得enum类型的时候,事情变得更加容易。 本来计划使用template技术来实现的,但是__property声明后不允许使用模板参数。所以作罢。 //以下为测试代码 typedef enum {xxx,yyy,zzz,eee,ffff} TSampleEnum; Marco_PrepareEnumerateName(TSampleEnum) void __fastcall TForm1::Button1Click(TObject *Sender) { Caption = GetEnumName(xxx); }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: