gpt4 book ai didi

Object Pascal 中的泛型 : types equality

转载 作者:行者123 更新时间:2023-12-05 02:59:46 26 4
gpt4 key购买 nike

我正在尝试学习 Object Pascal(可能是为了业余项目),我发现 Object Pascal (FreePascal) 在 {$mode objfpc} 中支持泛型。 .它们看起来像 C# 泛型,但似乎存在差异。当我试图声明一个变量时:

uses Fgl;
...
SomeVariable: TFPSList<string>;

我遇到了关于意外“<”的错误,我删除了参数 <string>并通过编译。因此,似乎字符串列表和整数列表将以相同的方式声明:Something: TFPSList .但这意味着 Pascal 将两个列表视为同一类型,对吧?在 C# 和其他语言中,类型参数修改所有类型并创建新类型。我知道旧的 Pascales 使用指针容器作为“通用”解决方案( TList 等),但是 TFPSList是一个真正的泛型,但在声明中它看起来像简单的指针容器。现代 Pascal(FreePascal、Delphi)是否区分这些泛型类型(类似于 TFPSList of int's/of string's)?如果我有 int 的通用列表,这是否意味着我可以将它传递给需要另一种类型列表的函数,以及我应该如何/在何处检查项目类型:编译时/运行时?我知道 isas关键字,但是如果列表为空怎么办?如何查看容器中元素的类型?

附言。如果这个问题听起来很奇怪或愚蠢,请原谅,我以前从未使用过 Pascal。

最佳答案

在 fgl 单元中,TFPSList 不是通用类型,它是一个普通类,因此您不能对它进行特化,使用 TFPGList,你的语法也是错误的,在 {$mode objfpc} 中你需要使用 specialize 关键字来泛型,正确的语法是:

program Project1;

{$mode objfpc}
uses Classes,sysutils,fgl;
type
SomeType=specialize TFPGList<String>;
var
SomeVariable:SomeType;
begin
SomeVariable:=SomeType.Create;
SomeVariable.Add('some string');
end.

free pascal 在 Delphi 模式 {$MODE Delphi} 中也是通用的,语法不同,更多信息在这里 free pascal doc

关于Object Pascal 中的泛型 : types equality,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57567748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com