2009-03-05 10 views
12

レコードをメソッドパラメータとして使用することは可能ですか?そのレコードのインスタンスを暗黙的に宣言することなく呼び出すことはできますか?デルファイの匿名レコードコンストラクタ

私はこのようなコードを書くことができるようにしたいと思います。

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

procedure Foo(AClasses : array of TRRec); 

このような方法、または同様の方法を呼び出します。

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

私はまだDelphi 5に邪魔されています。

+1

あなたはそのレコードのインスタンスを明示的に宣言することなく意味しますか? ;) – jpfollenius

+0

"anonymous record _initialisers_"と言った方が良いかもしれません –

答えて

17

はい。ほぼ。

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)]); 
+0

エレガントな解決策、ありがとうございます。 –

6

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.