zoukankan      html  css  js  c++  java
  • 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;

    记录一下,免得忘记



    看清这世界的美丽与残酷



    NAILY Soft
    Sephil on CNBlogs
  • 相关阅读:
    网页请求过滤器Filter
    高级查询
    SQL编程
    数据库的实现
    数据库设计
    使用ADO.NET查询和操作数据
    使用ADO.NET访问数据库
    深入C#中的String类
    使用属性升级MyBank
    C#语法快速热身
  • 原文地址:https://www.cnblogs.com/sephil/p/2673052.html
Copyright © 2011-2022 走看看