Delphi :使用泛型来接受任何“可调用的”(例如过程,对象的过程,lambda)

cnjp1d6j  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(196)

在C++ duck类型中有一个可调用的概念,例如一个可以像函数一样被调用的符号。我想用 Delphi 泛型来模拟这个概念。
我有一个问题,我需要一个过程,可以接受任何一个正常的过程,类方法或lambda作为参数。现在我有3个几乎相同的重载实现。有没有办法使用 Delphi 泛型来避免这种重复?

k4emjkb1

k4emjkb11#

对此,您不需要泛型。
reference to XXX of objectreference to X兼容(其中X是一个过程类型,如procedure(X: Integer))。
例如,

program Project1;

{$APPTYPE CONSOLE}

uses
  System.SysUtils;

type
  TTestProc = procedure(X: Integer);
  TTestMeth = procedure(X: Integer) of object;
  TTestRef = reference to procedure(X: Integer);

// Ordinary procedure
procedure TestProc(X: Integer);
begin
end;

// Method
type
  TMyClass = class
    class procedure TestMeth(X: Integer);
  end;

class procedure TMyClass.TestMeth(X: Integer);
begin
end;

begin
  var A: TTestRef;
  A := TestProc;
  A := TMyClass.TestMeth;
  A := procedure(X: Integer) begin end;
end.

相关问题