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); }
不过即便如此,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); }
相关文章推荐
- 取得枚举类型enum中的元素名称
- enum disk driver枚举磁盘,可取得当前任意类型磁盘
- c# 枚举 enum 类型
- C++中enum枚举类型成员重名问题的解决方法 - Enum枚举类型的类封装(转)
- C++11:强类型枚举(enum)
- 全面解读Java中的枚举类型enum的使用
- java enum 一个枚举类型
- mysql中的枚举类型ENUM的用法:
- 获取枚举类型Enum的注释内容。
- Hibernate将Enum枚举类型映射为Int类型(补充VARCHAR类型配置)
- .net枚举Enum类型说明
- 【转】C++中enum枚举类型成员重名问题的解决方法 - Enum枚举类型的类封装
- 结构体struct、枚举enum、联合体union、位字段、自定义类型typedef、字节对齐
- C#枚举类型-Enum
- c语言之枚举类型(enum)
- 高阶Java枚举类型enum使用详解
- 字符串转换为枚举类型 Enum.Parse()
- enum枚举类型使用
- 枚举类型enum的简单用法
- Item 30 用enum代替int常量类型枚举,string常量类型枚举