【问题标题】:Delphi and enum德尔福和枚举
【发布时间】:2011-01-23 16:02:07
【问题描述】:

Delphi 在 C 中是否有 enum 的类比?

【问题讨论】:

标签: delphi


【解决方案1】:

【讨论】:

【解决方案2】:

【讨论】:

【解决方案3】:

是的,Delphi 有以下枚举类型构造:

type
  TDigits = (dgOne, dgTwo, dgThree <etc>);

此外,就像在 C 中一样,枚举类型的每个符号都可能有 一个指定的值,像这样:

type
  TDigits = (dgOne = 1, dgTwo, dgThree <etc>);

【讨论】:

  • 应该补充一点,如果没有指定明确的值,常量会自动递增(相对于直接前驱)。
【解决方案4】:

除了关注相似之处的积极回应外,还有

一些限制:

1。 Delphi 不支持匿名枚举。

所以你必须翻译

enum { SOME_CONSTANT = 42 };

进入

const
  SOME_CONSTANT = 42

...顺便说一句,这是对您的实际意图更好的措辞。但不幸的是,这可以转化为不同的东西。至少 C++Builder 6 在自动生成的*.hpp 文件中是这样翻译的:

static const Shortint SOME_CONSTANT = 0x2A;

2。 Delphi 6 添加了显式枚举值。

Delphi 6 引入了向枚举器显式添加值的功能。所以你必须切换到普通常量,更多信息请参见this answer to How to create an enum with explicit values in Delphi 5

3。最后是C的一个限制:

在 C 中,枚举只是编译时常量,根据需要隐式转换为 int。这基本上是支持结束的地方。 Delphi 具有更强的打字能力,但提供了有关有效范围和迭代的信息,请参阅这个 sn-p:

procedure TForm1.Button1Click(Sender: TObject);
type
  TMyEnum = (meOne, meTwo, meThree);
var
  v: TMyEnum;
  txt: String;
begin
  for v := Low(TMyEnum) to High(TMyEnum) do
    txt := txt + IntToStr(Integer(v)) + ' ';
  ShowMessage(txt)
end;

【讨论】:

    猜你喜欢
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2010-12-26
    • 2011-08-27
    • 2017-07-14
    相关资源
    最近更新 更多