web-dev-qa-db-ja.com

Delphiのプロシージャで関数をパラメータとして渡す方法は?

オブジェクト全体を渡すのではなく、プロシージャ内のパラメータとしてオブジェクト関数を渡すことは可能ですか?

次のようなパブリッククラスパラメータとして定義された関数を持つレコード定義があります。

    TMyRecord = record
      public
        class function New(const a, b: Integer): TMyRecord; static;
        function GiveMeAValue(inputValue: integer): Single;
      public
        a, b: Integer;
      end;

関数は次のようになります。

    function TMyRecord.GiveMeAValue(inputValue: Integer): Single;
    begin
      RESULT := inputValue/(self.a + self.b);
    end;

次に、クラス関数GiveMeAValueを呼び出すプロシージャを定義したいのですが、レコード全体を渡したくありません。たとえば、次のようなことはできますか?

    Procedure DoSomething(var1: Single; var2, var3: Integer, ?TMyRecord.GiveMeAValue?);
    begin
      var1 = ?TMyRecord.GiveMeAValue?(var2 + var3);
      //Do Some Other Stuff
    end;

もしそうなら、どうすれば関数をプロシージャパラメータとして正しく渡すことができますか?

12
Trojanian

次のような関数の新しいタイプを定義できます。

TGiveMeAValue= function(inputValue: integer): Single of object;// this definition works fine for methods for records.

次に、メソッドDoSomethingを定義します

Procedure DoSomething(var1: Single; var2, var3: Integer;GiveMeAValue: TGiveMeAValue);
begin
  writeln(GiveMeAValue(var2 + var3));
end;

そして、そのように使用します

var
  L : TMyRecord;
begin
    l.a:=4;
    l.b:=1;
    DoSomething(1, 20, 5, L.GiveMeAValue);
end;
21
RRUZ