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

原创 2004年06月25日 15:22:00

由于Pascal和C++的本质区别,在Delphi里面强大的RTTI功能,BCB中就被相对弱化了很多。
不过即便如此,BCB仍然可以享受TObject带来的好处,
虽然我们不能够直接使用在delphi下十分方便的GetEnumName。

 

我们还是不需要为每个枚举类型实现一个静态的String列表。

考虑一下如下的宏实现,为了享受TObject的好处,我们需要从它继承一个VCL子类,

并且为这个类声明一个属性,使得我们可以使用GetPropInfo来取得ENUM类型信息。

 

#include <TYPINFO.HPP>

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

#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);

}

C语言enum枚举类型解析

在实际应用中,有的变量只有几种可能取值。如人的性别只有两种可能取值,星期只有七种可能取值。在 C 语言中对这样取值比较特殊的变量可以定义为枚举类型。所谓枚举是指将变量的值一一列举出来,变量只限于列举出...
  • skyflying2012
  • skyflying2012
  • 2014年04月01日 15:37
  • 117118

使用反射读取enum的属性

使用到的Enum如下:  public enum Colour{      RED(113001, "红色"),      BLUE(113002, "蓝色");      private i...
  • JIESA
  • JIESA
  • 2016年08月03日 22:17
  • 1087

python 枚举类(enum)

Python enum(枚举) # 枚举类 Enum from enum import EnumMonth = Enum('Month',('Jan','Feb', 'Mar', 'Apr', 'Ma...
  • Small_loving
  • Small_loving
  • 2016年01月20日 16:47
  • 6077

C++运行时类型信息揭密

  • 2012年02月16日 22:52
  • 1KB
  • 下载

Lua 与C/C++ 交互系列:动态注册枚举enum到Lua Code中,在运行时在Lua Code中获取内省信息

在C语言特征本身,不提供运行时信息。C语言的拓展集,C++语言特征本身对运行时提供支持。在C++语言中通过typeid(),dynamic_case()等函数可以获取类型的内省信息。 在Java语言中...
  • sunning9001
  • sunning9001
  • 2015年06月28日 13:20
  • 2375

运行时类型信息RTTI及类型转换

  • 2008年05月29日 10:27
  • 73KB
  • 下载

使用Java的RTTI(运行时类型信息)要注意的地方

如果要使用Class的应用来构造一个对象的示例, 那么这么对象对应的类必须有一个无参数的构造函数,例如:  Class ref=XXX.class; XXX xxxref=ref.newInsta...
  • afeiluo
  • afeiluo
  • 2014年01月02日 15:58
  • 630

4.MFCRTTI,运行时类型信息

RTTI MFC DECLARE_DYNAMIC IMPLEMENT_DYNAMICLASS WINDOWS
  • lingdi2000
  • lingdi2000
  • 2015年06月10日 14:39
  • 503

[面试] C/C++ 语法(六)—— RTTI(运行时类型信息)

RTTI(RunTime Type Information),顾名思义,对象运行时类型信息,以便在运行时进行类型识别。C++ 的对象识别可通过以下三个技术得以实现: (1)dynamic_cast 运...
  • lanchunhui
  • lanchunhui
  • 2016年03月27日 12:19
  • 504

C++ - RTTI(RunTime Type Information)运行时类型信息 详解

RTTI(RunTime Type Information)运行时类型信息 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details...
  • u012515223
  • u012515223
  • 2014年04月23日 16:07
  • 2816
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BCB运行期取得Enum(枚举)类型信息
举报原因:
原因补充:

(最多只允许输入30个字)