我说的就是D2009,刚才试了一下,在类中写一个类函数就可以达成上面的效果 type test<T> = class class function AddValue(a,b : T):T;static; end;class function test<T>.AddValue(a,b : T):T; begin result := a + b; end;
结贴了,a+b这段不能通过编译,但这不是这帖的重点,本帖重点是如何写一个泛型函数,下面的发言有点跑题。现在只有Delphi 2009支持泛型,但只支持类、record、interface使用泛型,无法支持C++类的普通泛型函数。function SetValue <T>(a : T):T; begin result := a; end;这种普通函数无法使用泛型。但是可以用使用类函数的类来代替,效果差不多。 type test<T> = class public class function SetValue(a : T):T; end; class function test<T>.SetValue(a : T):T; begin result := a; end;var b,c : Integer; begin c := 100; b := test<Integer>.SetValue(c); end.T可以放很多类型。
type
test<T> = class
class function AddValue(a,b : T):T;static;
end;class function test<T>.AddValue(a,b : T):T;
begin
result := a + b;
end;
比如:如果具体类型是 integer,当然 a+b可以运算。
但如果具体类型传入了TButton, buttona+buttonby应该等于什么呢?不会是doublebutton吧,哈哈。
这里要求传入的类实现了所需要的运算重载。
到底+代表了什么是你决定的,不是具体类型决定的.
泛型中对+是一种抽象,具体代表什么只有你才有决定权.
buttona+buttonby返回doublebutton或者2button,或者其他什么的都可以.但是前提是,是不是有意义.
如果buttona+buttonby返回doublebutton你认为是对的,那么对于你来说就是有意义的,那么buttona+buttonby也不是什么无稽之谈,也是正确的.
比如:
你自己定义 Integer类,重载+让他实现减法的操作
让Int5+Int4=Int1,那是当然是可以的。
但有个基本的准则,实现的操作意义应该同现有的习惯一致,不然后期代码维护将非常困难
begin
result := a;
end;这种普通函数无法使用泛型。但是可以用使用类函数的类来代替,效果差不多。
type
test<T> = class
public
class function SetValue(a : T):T;
end; class function test<T>.SetValue(a : T):T;
begin
result := a;
end;var
b,c : Integer;
begin
c := 100;
b := test<Integer>.SetValue(c);
end.T可以放很多类型。