zoukankan      html  css  js  c++  java
  • 类型与泛型标记

    uses System.TypInfo;

      // Sync with compiler internals
      TTypeKind = (tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat,
        tkString, tkSet, tkClass, tkMethod, tkWChar, tkLString, tkWString,
        tkVariant, tkArray, tkRecord, tkInterface, tkInt64, tkDynArray, tkUString,
        tkClassRef, tkPointer, tkProcedure {, tkMRecord});

    type
    {$IFDEF NEXTGEN}
      TSymbolName = Byte;
    {$ELSE  NEXTGEN}
      TSymbolNameBase = string[255];
      TSymbolName = type TSymbolNameBase;
    {$ENDIF NEXTGEN}

      TTypeInfoFieldAccessor = record
      strict private                   //静态?私有
        FData: PByte;
      public
        procedure SetData(const Data: PByte); inline;
        class operator Equal(const Left, Right: TTypeInfoFieldAccessor): Boolean; inline;
        function UTF8Length: integer; inline;
        function ToString: string;
    {$IFNDEF NEXTGEN}
        function ToShortUTF8String: ShortString; inline;
    {$ENDIF !NEXTGEN}
        function ToByteArray: TBytes;
        function Tail: PByte; inline;
      end;

    -------------------TypeInfo (T)-------------------

      PTypeInfo = ^TTypeInfo;
      TTypeInfo = record
        Kind: TTypeKind;
        Name: TSymbolName;
        function NameFld: TTypeInfoFieldAccessor; inline;
       {TypeData: TTypeData}
        function TypeData: PTypeData; inline;
      end;

    function TSampleClass<T>.GetDataName: string;
    var
     Kind: TTypeKind;
    begin
      Result := GetTypeName (TypeInfo (T));
      Kind := PTypeInfo(TypeInfo(T))^.Kind;
      case Kind of
        tkInteger: ShowMessage('I');
        tkFloat: ShowMessage('F');
        tkString,tkUString: ShowMessage('S');
        tkChar:   ShowMessage('C');
        tkClass:  ShowMessage('Class');
        else ShowMessage(Result);
      end;
    end;

  • 相关阅读:
    ECharts grid组件离容器的距离
    防火墙centos7执行 service iptables status报错问题完美解决
    linux 在切换用户时出现:命令提示符-bash-4.1$错误解决
    DataTable转为TXT文档
    读取ecxel中数据——NPOI.Excel和Aspose
    SQL连接数据库
    fiddler软件无法生成代码
    webapi发布后更新(无前台时)
    webapi日志记录(TXT存储)
    webapi使用Get进行访问时,url长度被限制解决办法
  • 原文地址:https://www.cnblogs.com/ZhouXiHong/p/4373900.html
Copyright © 2011-2022 走看看