谈谈在lazarus中使用泛型(一)基础知识和背景

泛型有时被称为参数化类型。也就是先定义一个占位符,然后在实际使用时替代为真实使用的数据类型。

以下内容摘于FPC官网Generics - Free Pascal wiki

自FPC2.2版以来,FPC已在{$mode ObjFPC}中正式支持泛型,并在2.6.0版起在{$mode Delphi}模式中使用泛型。

FPC支持两种不同方言的原因很简单,因为FPC在Delphi之前几年就实现了泛型。

可以分别使用{$mode Delphi}和{$modeObjFPC}语法编写泛型单元,但一个单元不能混用两种模式。

自由泛型库或FGL是用{$mode ObjFPC}编写的泛型容器的FPC本机集合。

rtl泛型包是用{$mode Delphi}编写的泛型容器的一个更大、更具特色的集合,它试图与Delphi泛型库兼容。该软件包在FPC 3.1.1.+中作为标准提供,但有FPC 3.0.4的版本。可获得的FGL和rtl泛型都可以在两种语法模式中使用。

开始使用泛型最简单的方法是使用fgl单元,它是基本系统泛型类的原型单元。到目前为止,它包含几个基本类:

  • TFPGList
  • TFPGObjectList
  • TFPGInterfacedObjectList
  • TFPGMap

看看下面的例子,显示如何在列表中存储用户定义类的多个实例:

{$mode objfpc}
uses fgl;
type
   TMyClass = class(TObject)
      fld1 : string;
   end;
   TMyList = specialize TFPGObjectList<TMyClass>;
var
   list : TMyList;
   c : TMyClass;
begin
   // create the list and add an element
   list := TMyList.Create;
   c := TMyClass.Create;
   c.fld1 := 'c1';
   list.Add(c);
   // retrieve an element from the list
   c := list[0];

posted @ 2023-02-16 23:21  仙侣步惊云  阅读(513)  评论(0)    收藏  举报