微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从一个常量的记录数组中引用一个类?

我有一个类,TiffData包含加载和显示数据的抽象方法,以及一些定义这些方法的TTiffByte,TTiffAscii,TTiffShort等祖先类.

我还有一个常量数组或记录,可以让我根据IFD中记录的数据类型查找有关类型的信息.

我无法弄清楚,如何为每个数组元素存储关联的类.

type
    TtiffType = record
      name  : string;
      bytes : word;
      data  : class;   {  ?  }
      desc  : string;
    end;

const
TiffTypes : array[ 1 .. 18 ] of TTiffType =  (

{01} ( name: 'byte';  bytes : 1; data: TTiffByte;     { ? }
       desc: '8-bit unsigned number.'   ),{02} ( name: 'ascii';  bytes : 1; data: TTiffAscii;   { ? }
       desc: '8 bit byte that contains a 7 bit ASCII code; the last byte must be NULL (binary zero)'   ),{03} ( name: 'short';  bytes : 2; data: TTiffShort;   { ? }
       desc: '16-bit (2-byte) unsigned integer.'   ),...

我想要做的是在数组中保持对类的引用:

value := TiffTypes[ fldType ].Data.Create;

value.loadFromOffset( offset );
Edit1.Text := value.getShortString;

或者在数组中保存一个构造函数

value := TiffTypes[ fldType ].data;

value.loadFromFile( f,offset,count );
InternalRepresentation := TTiffAscii( value.storage );

解决方法

由于您的类具有公共基类TiffData,因此您可以在记录中使用TiffData类,例如:
type
  TtiffType = record
    name  : string;
    bytes : word;
    data  : class of TiffData; // <-- here
    desc  : string;
  end;

然后使用Data.Create将按预期工作,只要TiffData的构造函数声明为virtual,并且每个派生类都会覆盖它.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐