質問

レコードをメソッドパラメータとして使用し、そのレコードのインスタンスを暗黙的に宣言せずに呼び出すことは可能ですか?

このようなコードを書きたいと思います。

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

procedure Foo(AClasses : array of TRRec);

次に、このようなメソッドまたは類似のメソッドを呼び出します。

Foo([('Button1', TButton), ('Lable1', TLabel)]);

まだDelphi 5にこだわっています。

役に立ちましたか?

解決

はい。ほぼ。

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

function r(i: string; c: TClass): TRRec;
begin
  result.ident     := i;
  result.classtype := c;
end;

procedure Foo(AClasses : array of TRRec);
begin
  ;
end;

// ...
Foo([r('Button1', TButton), r('Lable1', TLabel)]);

他のヒント

const配列を使用することもできますが、「gangph」が提供するソリューションほど柔軟ではありません。 (特に、配列宣言で配列のサイズ([0..1])を指定する必要があります。レコードは匿名ですが、配列はそうではありません)。

type
  TRRec = record
    ident : string;
    classtype : TClass;
  end;

procedure Foo(AClasses : array of TRRec);
begin
end;

const tt: array [0..1] of TRRec = ((ident:'Button1'; classtype:TButton),
                                   (ident:'Lable1'; classtype:TLabel));

Begin
  Foo(tt);
end.
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top