DelphiXE泛型不能用类类型做为约束的另类解决方案

前天想写个泛型类,用来保存类类型(如TClass、TComponentClass之类)

但是DelphiXE的泛型约束不支持TClass

TClassList<T: TClass> 将会得到编译错误

因此我只能去掉约束条件 TClassList<T>

但是这样又有个问题,即 T 类型不明确,无法用 Assigned(T) 或 T <> nil 来判断值是否为空

后来想了个办法绕过了这个问题,详见代码

 

procedure TClassList<T>.Register( const ADisplayName:  string; AClass: T);
var
  P: Pointer;
begin
  P := PPointer(@AClass)^;
  Assert(Assigned(P),  ' Target class cannot be nil. ');

  FClassList.AddObject(ADisplayName, P);
end;

function TClassList<T>.Find( const ADisplayName:  stringout Value: T): Boolean;
var
  Index: Integer;
begin
  Assert(ADisplayName <>  ''' Display name cannot be blank. ');

  Index := FClassList.IndexOf(ADisplayName);
  Result := Index >=  0;
   if Result  then PPointer(@Value)^ := Pointer(FClassList.Objects[Index]);
end;

 

记录一下,免得忘记

你可能感兴趣的:(DelphiXE泛型不能用类类型做为约束的另类解决方案)