Delphi函数通用

2023-12-28

我想创建一个通用函数。我是通用的新手。 我有 3 个不同类型的私人列表。我想要一个公共通用方法来返回列表中的 1 项。

我有下面的代码。 (我已经简化了)

TFilter = class
private
   FListFilter            : TObjectList<TFilterEntity>;
   FListFilterDate        : TObjectList<TFilterDate>;
   FListFilterRensParam   : TObjectList<TFilterRensParam>;
public
   function yGetFilter<T>(iIndice : integer) : T; 
....
function TFilter .yGetFilter<T>(iIndice : integer) : T; 
begin
    if T = TFilterEntity then
       result := T(FListFilter.Items[iIndice])
    else
       ....
end;

我知道该代码无法运行,但是您能告诉我是否可以执行该操作吗?


简单介绍一个约束 http://docwiki.embarcadero.com/RADStudio/en/Constraints_in_Generics#Class_Type_Constraints通用参数的T。它必须是一个类。

从文档中:

类型参数可以受零个或一个类类型的约束。与接口类型约束一样,此声明意味着编译器将要求作为参数传递给受约束类型参数的任何具体类型与约束类的赋值兼容。 类类型的兼容性遵循 OOP 类型兼容性的正常规则 - 可以在需要祖先类型的地方传递后代类型。

将声明更改为:

function yGetFilter<T:class>(iIndice : integer) : T;

Update

看来在 XE5 及更早版本中您会收到编译器错误:

E2015 运算符不适用于该操作数类型

在这一行:

if T = TFilterEntity then

在 XE6 及以上版本中此错误已修复。

要规避,请按照大卫在评论中所说的那样:

if TClass(T) = TFilterEntity then
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi函数通用 的相关文章

  • 不寻常的通用语法:Arrays.asList(...)

    我发现了一个 不寻常 的通用语法 例如 Arrays
  • 如何从文件中获取整个函数

    好的 我现在正在逐行阅读一个文件 我知道文件中的每个函数名称 因为它是在 XML 文档中的其他位置定义的 应该是这样的 function function name 其中 function name 是函数的名称 我从 XML 文档中获取所
  • Delphi:如何计算大文件的 SHA 哈希值

    您好 我需要生成 5 Gig 文件的 SHA 您知道有一个非基于字符串的 Delphi 库可以做到这一点吗 你应该使用DCPcrypt v2 http www cityinthesky co uk cryptography html读取缓冲
  • 在 tlistbox 中绘制缩略图

    在 DelphiXE 中 我使用 tFileOpenDialog 选择一个文件夹 然后在 tListBox 中列出该文件夹中的所有 jpg 文件 我允许将列表项拖放到列表中进行自定义排序 以便稍后按顺序显示它们 我希望能够在文件名旁边绘制图
  • `list()` 被认为是一个函数吗?

    list显然是内置类型 https docs python org 3 library stdtypes html list在Python中 我看到底下有一条评论this https stackoverflow com a 53645813
  • 构建机器是否需要单独的 Delphi XE4 许可证?

    用于通过以下方式构建应用程序dcc32在构建服务器上我可以使用 Delphi Trial 这种方法的许可证没有任何问题 现在 我将通过以下方式在 TeamCity 上构建 Delphi XE4 应用程序msbuild 我是否需要拥有构建机器
  • java中将函数作为参数传递

    我正在熟悉 Android 框架和 Java 并希望创建一个通用的 NetworkHelper 类 该类将处理大部分网络代码 使我能够从中调用网页 我按照developer android com 上的这篇文章创建了我的网络类 http d
  • Swift 中使用 T 型进行泛型调用

    在我的应用程序中 我想创建一个通用方法 该方法根据给定类型 T 创建一个对象数组 我创建了以下函数 func getArray
  • 为什么不提高EInvalidPointer?

    德尔福文档状态 http docwiki embarcadero com Libraries en System SysUtils EInvalidPointer 切勿提出E无效指针直接异常 E无效指针由内存管理器内部引发 我正在编写一个自
  • 使用 IdTCPClient 和 IdTCPServer 发送和接收 TMemoryStream

    我在 XE2 中找到了 Remy Lebeau 的 IdTCP 组件聊天演示 我想玩一下 可以发现 我想使用这些组件发送图片 最好的方法似乎是使用 TMemoryStream 如果我发送字符串 连接工作正常 字符串传输成功 但是当我将其更改
  • 为什么 .Net 框架指南建议您不要使用 ref/out 参数?

    显然 他们很 混乱 这是认真的原因吗 你还能想到其他的吗 你见过有多少开发人员并不真正理解 ref out 吗 我在真正需要的地方使用它们 但在其他地方则不然 它们通常仅在您想有效返回两个或多个值时才有用 在这种情况下它至少值得thinki
  • SSL 错误 1409442E 使用 TIdHTTP 通过 HTTPS 下载文件 [重复]

    这个问题在这里已经有答案了 我正在使用德尔福10 3 3 下面的代码曾经有效 但现在尝试通过 HTTPS 下载文件时遇到错误 连接 SSL 错误错误 1409442E SSL 例程 SSL3 READ BYTES tlsv1 警报协议版本
  • 为什么 `obj.foo = function() { };` 没有将名称 `foo` 分配给函数?

    从 ES2015 ES6 开始 函数有了专有名称 包括官方名称 name属性 而函数创建时的赋值除了明显的函数声明和命名函数表达式之外还有多种方式 比如给变量赋值 函数的名字设置为变量的名字 给对象属性赋值 函数的名称设置为属性的名称 甚至
  • Powershell 命令未发现异常

    我有以下 powershell 脚本 它使用一个函数并且可以在 ISE 中正常运行 Get ComputerSessions Computer localhost Functions Function Get ComputerSession
  • C 链表销毁函数

    我正在尝试学习 C 和很多人一样 我对指针有点困惑 无论如何 我创建了一个递归函数来销毁我的链表 但是正如我调试的那样 当我从函数返回时 列表的头部不应该为空 所以我猜这是对指针的一些基本误解 这是函数 void destroy struc
  • R:(中缀)运算符的两个定义之间的冲突:如何指定包?

    在 R 中 每当两个包定义相同的函数时 很容易指定要使用哪个包pkg foo 但是 当冲突的功能是一个时 你该怎么办 infix运算符 即使用定义 举个例子 两者ggplot2 and crayon define 有没有一种方法可以让我默认
  • 使用“const cv::Mat &”、“cv::Mat &”、“cv::Mat”或“const cv::Mat”作为函数参数的区别?

    我已经彻底搜索过 但没有找到一个简单的答案 传递 opencv 矩阵 cv Mat 作为函数的参数 我们传递一个智能指针 我们对函数内部的输入矩阵所做的任何更改也会改变函数范围之外的矩阵 我读到 通过将矩阵作为 const 引用传递 它不会
  • 如何等到我启动的程序使用完该文件后才删除该文件?

    我一直在寻找一种方法来打开通过 Delphi 应用程序及其适当的应用程序保存到我的计算机上的文件 该文件存储在 SQL 数据库中的 Varbinary 字段中 加载到内存流中 然后通过 TMemoryStream 的 SavetoFile
  • 打印任何类型的数组和列表的通用方法[重复]

    这个问题在这里已经有答案了 每当我调试一段涉及整数 双精度 字符串等数组或列表的代码时 有时我更喜欢打印它们 我为此所做的是为不同类型编写重载的 printArray printList 方法 for e g 我可能有这 3 种方法来打印各
  • 通用类不会将委托调用转发给具体子类

    鉴于以下情况 protocol EntityType var displayString String get extension String EntityType var displayString String return self

随机推荐

  • 使用 C# 在 html 文档中抓取由 JavaScript 动态生成的数据

    如何使用 C 抓取 html 文档中由 JavaScript 动态生成的数据 Using WebRequest and HttpWebResponse在C 库中 我能够以字符串形式获取整个html源代码 但困难在于源代码中不包含我想要的数据
  • 触发自定义类事件后,表单未更新

    我遇到一个问题 即使我看到事件触发 我的主表单也没有更新 让我解释一下情况并分享一些我的代码 因为我是业余爱好者 所以我确信这些代码会很糟糕 我创建了一个类来获取在后台运行进程的设置 我在该类中添加了一些自定义事件 以便我可以在表单中使用它
  • C# 泛型无法识别类型

    我不明白为什么下面的代码返回一个Cannot resolve method Write T 这对我来说似乎很明确 private static void WriteToDisk
  • 如何将您的代码上传到 Google Glass?

    我正在学习android和GDK 我安装了 Android开发者工具 和 SDK管理器 我制作了第一个 hello world 应用程序 但我不知道如何从 Windows 7 PC 连接到我的 Google Glass 来上传代码 如果有人
  • 如何释放记录中的对象?

    我想我遇到了一个棘手的情况 我需要能够释放一个记录字段的对象 如果它是一个类 我通常会在析构函数中编写清理代码 但是由于记录类型不能引入 析构函数 那么如何调用TObject 字段 Free 我预测会有两种类型的使用 用新记录替换记录 我认
  • 并发调用缓存方法

    我正在使用带有 Guava 缓存的 Spring 缓存抽象 我有一个带有 Cacheable 注释和参数 用作缓存键 的方法 用于将值放入缓存中 但该方法是在多线程环境中访问的 因此存在多个并发调用具有相同参数值的方法 因此 这意味着创建要
  • JavaScript 音频循环

    我想在后台播放音频 3 次 3 次后音频将自动停止 我已经尝试过这段代码 但它不起作用 HTML 代码
  • 在 XAML 中设置 TextBlock 的最大字符长度

    如何设置允许用户在 xaml 的 TextBlock 中输入的字符数 我会在模型上执行此操作还是创建某种自定义属性来处理它 TextBlock 没有 MaxLength Label 也没有 文本框可以 除非您对其进行了修改 否则用户无法向
  • 如何通过本地网络在 C# 桌面应用程序和移动(android)设备之间进行通信? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个 C net 3 5 桌面应用程序 可以在屏幕上打印一些数字 现在我想将其扩展到移动设备 在我的例子中是 Android 设备
  • 全局变量的快速去初始化

    我的 Swift 全局变量没有被取消初始化 class Person let name String init name String self name name println name is being initialized dei
  • 如何使用 Factory 将自定义参数传递给 ViewModel?

    我知道为了将自定义参数传递给视图模型 我们可以用ViewModelProvider NewInstanceFactory 像这样 Factory Class class MyFactory extends ViewModelProvider
  • WebApi 是否支持 application/x-www-form-urlencoded 开箱即用

    您好 我正在尝试设置一个 api 以允许第 3 方 webhook 成为发布 application x www form urlencoded 的目的地 我只使用过 webapi 处理过 json 和 xml 我是否需要创建一个自定义媒体
  • Rails/Rspec:测试delayed_job邮件

    只是想知道如何测试actionmailer请求实际上发送到rspec中的delayed job que 我本以为这很简单 但我的elaided job队列似乎并没有增加 代码如下 控制器 def create contact Contact
  • 如何隐藏图像,直到 jquery flexslider 完成加载后

    我尝试将 wootheme 的 Flexslider 集成到我的网站上 除了加载时之外 它看起来 工作得很好 当您使用滑块刷新页面时 在 flexslider 加载之前 大约 1 秒 第一张幻灯片会显得非常大并闪烁为黑色 然后消失 然后出现
  • 行尾转换如何在不同操作系统之间使用 git core.autocrlf

    我在 Stack Overflow 上阅读了很多不同的问题和答案git有关如何的文档核心 autocrlf设置作品 这是我从所读到的内容中得到的理解 Unix 和 Mac OSX OSX 之前的版本使用 CR 客户端使用 LF 行结尾 Wi
  • 如何将多个域指向一台服务器?

    我有一个几乎没有使用过的 VPS 我很乐意将我拥有的几个域 通过其他地方的注册商 指向此 VPS 的不同文件夹 有什么办法可以做到这一点吗 For example helloomgwtf com gt 111 111 111 111 hel
  • 替换 R 中缺失值的均值或众数

    我有一个由混合数据类型 数字 字符 因子 序数因子 缺少值 而我是 尝试创建一个 for 循环来替换缺失的值 如果是数字 则使用相应列的平均值 如果是字符 因子 则使用众数 这是我到目前为止所拥有的 fake array age lt c
  • 何时不使用 docker run --init

    The init flag https docs docker com engine reference run specify an init process of docker run导致tini初始化系统用作ENTRYPOINT 因此
  • 詹金斯。指定的代理类型“docker”无效。必须是 [任意、标签、无] 之一

    我的 JenkinsFile 如下所示 pipeline agent docker image node 12 16 2 args p 3000 3000 stages stage Build steps sh node version s
  • Delphi函数通用

    我想创建一个通用函数 我是通用的新手 我有 3 个不同类型的私人列表 我想要一个公共通用方法来返回列表中的 1 项 我有下面的代码 我已经简化了 TFilter class private FListFilter TObjectList