谈谈在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];
浙公网安备 33010602011771号