2014-10-29 89 views
0
type 
    TGeneric<T> = class(TBase) 
    public 
    procedure Swap(Harry : T); 
    procedure NotifyAll(AParams : T); 
    end; 

阵列我有两个问题泛型和常量

  1. 有什么办法,我可以在任何其他类型的样变异等类型转换的通用变量
  2. 我如何可以传递泛型类型函数接受常量数组喜欢这里

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

+0

嗨约翰,理想情况下,你会问两个问题 – 2014-10-29 08:17:22

+0

这两个问题都是相关的,所以我在这里没有单独问他们。 – 2014-10-29 08:22:55

+1

你已经将问题2的答案链接了,或者我在这里丢失了什么? – 2014-10-29 08:24:43

回答

1

有什么办法,我可以在任何其他类型强制转换的通用变量一样Variant

正如我回答说给你链接的问题,与仿制药效果很好的变异类型为TValue

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

如何传递泛型类型在接受array of const功能:您可以使用From方法从一个普通的类型做出TValue实例?

这是在question you linked to中询问的完全相同的问题。答案与此处所述的相同,即您不能将一个通用参数作为variant open array parameter进行传递。再次,TValue来救援。而不是使用变体开放数组参数,请使用开放数组TValue


底部这里行是与泛型的效果很好,并与所述的Delphi RTL供给,所述变体类型是TValue

+0

如果我使用tvalue它打破了我的代码的很多其他部分,这就是为什么我要避免它 – 2014-10-29 09:20:33

+0

您将不得不接受,您不能传递一个泛型参数作为变量开放数组参数。 – 2014-10-29 09:27:06

+0

我可以在其他类型中进行类型转换,然后发送它,但不是Tvalue – 2014-10-29 09:29:38