gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 14:47:36 27 4
gpt4 key购买 nike

我想在记录中使用对象的过程,如下所示:

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 错误 - 需要常量表达式。这是一个类的两个方法。我需要使用一些语法来完成这项工作,还是我在运行时构建数组?

最佳答案

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

  1. 函数的地址。
  2. 对象或主题的地址。

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

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

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

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

关于delphi - 如何在类型常量中包含方法指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17122012/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com