当前位置: 首页 > article >正文

[原创]在Delphi高效率的使用函数指针, TProc和TFunc类型.

[简介]
常用网名: 猪头三
出生日期: 1981.XX.XX
QQ: 643439947
个人网站: 80x86汇编小站
编程生涯: 2001年~至今[共23年]
职业生涯: 20年
开发语言: C/C++、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python
开发工具: Visual Studio、Delphi、XCode、Eclipse、C++ Builder
技能种类: 逆向 驱动 磁盘 文件
研发领域: Windows应用软件安全/Windows系统内核安全/Windows系统磁盘数据安全/macOS应用软件安全
项目经历: 磁盘性能优化/文件系统数据恢复/文件信息采集/敏感文件监测跟踪/网络安全检测

[序言]
由于最近又开始做一些代码转换, C++转换到Delphi, 这里涉及到函数指针的利用. 那么在最新的Delphi中, 针对函数指针, 提供了使用更方便的: TProc和TFunc类型.

[Delphi的内置原生封装]

type
  TProc = reference to procedure;
  TProc<T> = reference to procedure (Arg1: T);
  TProc<T1,T2> = reference to procedure (Arg1: T1; Arg2: T2);
  TProc<T1,T2,T3> = reference to procedure (Arg1: T1; Arg2: T2; Arg3: T3);
  TProc<T1,T2,T3,T4> = reference to procedure (Arg1: T1; Arg2: T2; Arg3: T3; Arg4: T4);

  TFunc<TResult> = reference to function: TResult;
  TFunc<T,TResult> = reference to function (Arg1: T): TResult;
  TFunc<T1,T2,TResult> = reference to function (Arg1: T1; Arg2: T2): TResult;
  TFunc<T1,T2,T3,TResult> = reference to function (Arg1: T1; Arg2: T2; Arg3: T3): TResult;
  TFunc<T1,T2,T3,T4,TResult> = reference to function (Arg1: T1; Arg2: T2; Arg3: T3; Arg4: T4): TResult;

  TPredicate<T> = reference to function (Arg1: T): Boolean;

由上面可以看出, 上述的类型定义是用于在Delphi中定义0到4个泛型参数的过程和函数类型.

过程类型(TProc): 被定义为对可以接受0到4个任意类型参数的过程的引用, 参数类型在名称后面紧跟着的尖括号<...>内指定. 例如,TProc<T1, T2>是对带有两个参数(Arg1为T1类型, Arg2为T2类型)的过程的引用.
函数类型(TFunc): 被定义为对可以接受0到4个任意类型参数的函数的引用, 与过程类型类似, 参数类型在名称后面紧跟着的尖括号<...>内指定, 函数的返回类型在最后以冒号指定.例如, TFunc<T1, T2, TResult>是对带有两个参数(Arg1为T1类型, Arg2为T2类型)并返回TResult类型值的函数的引用.

这些类型在Delphi中定义委托和回调时非常有用, 它们可以接受和返回不同范围的参数和返回类型, 使得更加灵活和适应性强. 此外, 使用泛型类型允许代码在不需要为每种特定数据类型定义单独版本的相同函数或过程的情况下重复使用.

[简单的代码使用案例]
fun_ReverseString()函数分配给定义为泛型类型TFunc<string, string>的名为func_CallBack的变量。这意味着func_CallBack是对ReverseString()函数的引用.

function fun_ReverseString(str_param_Input: string): string;
var
  int_Index: Integer;
begin
  Result := '';
  for int_Index := Length(str_param_Input) downto 1 do
    Result := Result + str_param_Input[int_Index];
end;

procedure TForm1.Button11Click(Sender: TObject);
var
  func_CallBack : TFunc<string, string>  ;
begin

   func_CallBack := fun_ReverseString ;
   ShowMessage(func_CallBack('123456789')) ;

end;// End Button11Click()

[总结]
TProc和TFunc类型是Delphi中的一个重要特性, 它们使得更高级的编程概念成为可能, 例如高阶函数, 函数式编程和事件处理. 通过定义具有泛型参数的过程和函数类型, 开发人员可以创建更加灵活和可重用的代码, 使其适应各种不同的使用情况.


http://www.kler.cn/news/354415.html

相关文章:

  • 什么开放式耳机最好用?推荐开放式蓝牙耳机榜上耳机!
  • 华为CE交换机telnet登录失败故障的排查方法
  • 【专题】关系数据库标准语言SQL
  • 人工智能需要学习哪些语言?
  • NodeJS火锅店点单系统-计算机毕业设计源码86547
  • Jmeter之GET与POST 请求的参数存放位置
  • 基于SpringBoot+Vue+uniapp的海产品加工销售一体化管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
  • 服务器数据恢复—服务器硬盘指示灯亮黄灯,raid崩溃的数据恢复案例
  • 机器学习-决策树详解
  • 携程线下一面,面试内容:
  • 【东方oj题解】1893、1821、1822
  • C++研发笔记2——学习规划概览
  • docker方式k8s环境搭建及pod简介
  • FFmpeg的简单使用【Windows】--- 视频混剪+添加背景音乐
  • 2. MySQL数据库基础
  • 医疗病历交互系统:Spring Boot技术解析
  • 【pytorch深度学习】CIFAR10图像分类
  • 【Mac苹果电脑安装】DBeaverEE for Mac 数据库管理工具软件教程【保姆级教程】
  • 【Linux安全基线】- CentOS 7/8安全配置指南
  • C++设计模式 单例模式