推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

玩转Delphi的函数指针

   2023-07-07 网络整理佚名2260
核心提示:什么是函数指针虽然现在大家都在讲面向对象,但是如果能够很好的掌握利用函数指针,在我们编写代码的时候也是我们的一大助力再来一个例子,我们将一个函数指针作为函数的参数,通过传递不同的实例函数来实现不同函数的调用上面这个动态函数的使用实例

什么是函数指针

函数指针指向特定类型。 函数的类型由其参数和返回类型决定,与函数名无关。 个人认为,所谓函数指针其实就是我们回调函数的指针的一种形式,类似于传递对象。 当我们得到对象之后,我们就可以调用这个对象中的函数/过程

让我们看一个例子

定义类型:

简单来说,就是将这种形式的函数定义为一个类型,然后我们通过这个类型定义一个变量。 变量的值是一个函数。 当我们调用该变量时,实际上是在调用该变量所指向的函数。 ,从而达到动态调用函数的目的(其实我更愿意说是回调)

type
IntProc = procedure (var Num: Integer);

定义实例函数

这些函数的名称是什么并不重要。 这些函数将用来给我们之前定义的函数类型赋值,但是参数列表和返回值类型必须与之前定义的函数类型一致。

procedure DoubleThevalue (var Value: Integer);
begin
Value := Value * 2;
end;

调用代码

var
IP: IntProc;
X: Integer;
begin
IP := DoubleThevalue;
X := 5;
IP (X);
end;

显然,这种调用方式比直接调用要麻烦很多,那么为什么我们要采用这种方式呢?

因为有些情况下,调用什么样的函数需要在实践中(运行时)决定,可以根据条件来判断。 使用同一个表达式调用不同的函数是非常灵活的。

实现回调机制

虽然现在大家都在讲面向对象,但是如果我们能够很好的掌握函数指针的使用,对于我们写代码的时候也会有很大的帮助。

再比如,我们使用函数指针作为函数的参数,通过传递不同的实例函数来实现不同函数的调用

type
//函数指针
TFunctionParameter = function(const value : integer) : string;

//函数-实例1
function One(const value : integer) : string;
begin
result := IntToStr(value) ;
end;

//函数-实例2
function Two(const value : integer) : string;
begin
result := IntToStr(2 * value) ;
end;


//定义将要使用动态函数指针参数的函数

function DynamicFunction(f : TFunctionParameter; const value : integer) : string;
begin
result := f(value) ;
end;

上面动态函数的使用示例

var
s : string;
begin

s := DynamicFunction(One,2006) ;
ShowMessage(s) ;

s := DynamicFunction(Two,2006) ;
ShowMessage(s) ;
end;

从上面的例子我们大概可以看出我们在调用函数的时候传递了两个参数,第一个是我们真正的函数(我们可以称之为函数实例),第二个参数就是我们传递给函数实例的数据

今天的内容到此结束。 我可以帮你理清理论知识。 代码练习只能自己完成。 永远不要指望某个老师或几个教程就能解决你所有的问题

写在最后:纸上谈兵终究会变得肤浅,这件事需要你自己清醒! 与你分享!

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON