首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对象Pascal中的泛型:类型相等

对象Pascal中的泛型:类型相等
EN

Stack Overflow用户
提问于 2019-08-20 06:25:38
回答 1查看 538关注 0票数 3

我正在尝试学习Object (可能用于业余项目),我发现Object (FreePascal)支持{$mode objfpc}中的泛型。它们看起来像C#泛型,但似乎有区别。当我试图声明一个变量时:

代码语言:javascript
运行
复制
uses Fgl;
...
SomeVariable: TFPSList<string>;

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

PS。对不起,如果这个问题听起来奇怪或愚蠢,我以前从未用过帕斯卡。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-20 17:04:36

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

代码语言:javascript
运行
复制
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.

免费pascal在Delphi模式{$MODE Delphi}中也是通用的,具有不同的语法,更多信息在这里免费帕斯卡医生

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57567748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档