我想在记录中使用对象的过程,如下所示:
TCommandRec = record
name: string;
fn: procedure of object;
end;
Run Code Online (Sandbox Code Playgroud)
我可以通过赋值创建一个数组:
commands: array [0..1] of TCommandRec;
...
commands[0].name := '-help';
commands[0].fn := DoHelp;
commands[1].name := '-load';
commands[1].fn := DoLoad;
Run Code Online (Sandbox Code Playgroud)
我真正想做的是声明一个常量:
const
cmds: array [0..1] of TCommandRec =
(
(name: '-help'; fn: DoHelp),
(name: '-load'; fn: DoLoad)
);
Run Code Online (Sandbox Code Playgroud)
但是,我收到了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);
Run Code Online (Sandbox Code Playgroud)
当然,如果你的函数作为类方法而不是实例方法可行,那么这对你有用.我只是添加上面的代码来说明你可以拥有常量方法指针,只要主题是编译时常量.
| 归档时间: |
|
| 查看次数: |
295 次 |
| 最近记录: |