加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何在类型常量中包含方法指针?

发布时间:2020-12-15 04:04:00 所属栏目:大数据 来源:网络整理
导读:我想在记录中使用对象的过程,如下所示: TCommandRec = record name: string; fn: procedure of object;end; 我可以通过赋值创建一个数组: commands: array [0..1] of TCommandRec;...commands[0].name := '-help';commands[0].fn := DoHelp;commands[1].na
我想在记录中使用对象的过程,如下所示:
TCommandRec = record
  name: string;
  fn: procedure of object;
end;

我可以通过赋值创建一个数组:

commands: array [0..1] of TCommandRec;

...

commands[0].name := '-help';
commands[0].fn := DoHelp;
commands[1].name := '-load';
commands[1].fn := DoLoad;

我真正想做的是声明一个常量:

const
  cmds: array [0..1] of TCommandRec =
  (
    (name: '-help'; fn: DoHelp),(name: '-load'; fn: DoLoad)
  );

但是,我收到了DoHelp和DoLoad的错误 – 期望的常量表达式.这是一类的两种方法.是否有一些语法我需要用来使这项工作或我在运行时坚持构建数组?

解决方法

对象的方法是所谓的双指针类型.它封装了以下信息:

>功能的地址.
>对象的地址或主题.

前者在编译时是已知的,但通常后者不是.这就是您通常需要在运行时创建这些东西的原因.

如果您可以安排在编译时知道主题,那么您可以声明记录类型的类型常量.例如:

type
  TMyRecord = record
    Foo: procedure of object;
  end;

  TMyStaticClass = class
    class procedure Foo;
  end;

class procedure TMyStaticClass.Foo;
begin
end;

const
  MyRecord: TMyRecord = (Foo: TMyStaticClass.Foo);

当然,如果你的函数作为类方法而不是实例方法可行,那么这对你有用.我只是添加上面的代码来说明你可以拥有常量方法指针,只要主题是编译时常量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读