泛型和const数组

时间:2014-10-29 08:14:21

标签: delphi generics delphi-xe4

type
  TGeneric<T> = class(TBase)
  public
    procedure Swap(Harry : T);
    procedure NotifyAll(AParams : T); 
  end;

我有两个问题

  1. 有没有办法可以在任何其他类型中使用变体等类型转换泛型变量。
  2. 如何在接受const数组的函数中传递泛型类型

    Delphi - How can I pass Generic parameter to function that accept Array of const parameter

2 个答案:

答案 0 :(得分:1)

  

有没有办法可以在Variant等任何其他类型中对一般变量进行类型转换。

正如我对您所链接问题的回答所述,适用于泛型的变体类型为TValue。您可以使用TValue方法从泛型类型创建From实例:

procedure TMyClass.Foo<T>(const Item: T);
var
  Value: TValue;
begin
  Value := TValue.From<T>(Item);
end;
  

如何在接受array of const的函数中传递泛型类型?

这是question you linked to中提出的完全相同的问题。答案与那里所述的相同,即您不能将通用参数作为variant open array parameter传递。再次,TValue来救援。不使用变量开放数组参数,而是使用TValue的开放数组。


这里的底线是适用于泛型的变体类型,以及随Delphi RTL提供的变体类型TValue

答案 1 :(得分:0)

从链接问题复制我的代码:

procedure TEventMulticaster<T>.Notify(AUser: T);
var
  ParametersAsTValueArray: array[1 .. 1] of TValue;
begin
  ParametersAsTValueArray[1] := TValue.From<T>(AUser);
  NotifyAll(TValueArrayToArrayOfConst(ParametersAsTValueArray));
end;