Delphi XE-2 を使用する (すべての更新が適用されます)。
次のコードでは、DoSomething および DoInteger の呼び出しでコンパイル エラーが生成されると思いますが、そうではありません。
program OpenArrayQuestion;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
type
IComposite = interface(IInterface)
['{1AC3CF6A-1316-4838-B67B-9FB075585C1E}']
end;
IComposite<T: IComposite> = interface(IComposite)
['{7F866990-9973-4F8E-9C1F-EF93EF86E8F2}']
end;
function DoSomething(const aData: array of IComposite): Boolean;
begin
Result := True;
end;
function DoInteger(const aData: array of Integer): boolean;
begin
Result := True;
end;
var
FData: IComposite;
FInteger: Integer;
begin
DoSomething(FData);
DoInteger(FInteger);
end.
FData/FInteger を渡すことができる理由を誰かが説明できますか[]
?
インターフェイスの配列、または関連するジェネリックに関係している可能性があると思いましたが、コンパイラは整数のオープン配列に渡された整数も受け入れます。