zoukankan      html  css  js  c++  java
  • How to Use a Function or a Procedure as a Parameter in another Function

    http://delphi.about.com/od/adptips2006/qt/functionasparam.htm

    In Delphi, procedural types (method pointers) allow you to treat procedures and functions as values that can be assigned to variables or passed to other procedures and functions.

    Here's how to call a function (or procedure) as a parameter of another function (or procedure) :

    1. Declare the function (or procedure) that will be used as a parameter. In the example below, this is "TFunctionParameter".
    2. Define a function that will accept another function as a parameter. In the example below this is "DynamicFunction"
    type    
    TFunctionParameter = function(const value : integer) : string;  
    ...  
    function One(const value : integer) : string; 
    begin    
        result := IntToStr(value) ; 
    end;  
    
    function Two(const value : integer) : string; 
    begin    
        result := IntToStr(2 * value) ; 
    end;  
    
    function DynamicFunction(f : TFunctionParameter) : string; 
    begin    
        result := f(2006) ; 
    end;  
    ...  
    //Example usage:  
    var    s : string; 
    begin    
        s := DynamicFunction(One) ;    
        ShowMessage(s) ; //will display "2006"     
        s := DynamicFunction(Two) ;    
        ShowMessage(s) ; // will display "4012" 
    end;

    Note:

    • Of course, you decide on the signature of the "TFunctionParameter": whether it is a procedure or a function, how many parameters does it take, etc. 
    • If "TFunctionParameter" is a method (of an instance object) you need to add the words of object to the procedural type name, as in:
      TFunctionParameter = function(const value : integer) : string of object; 
    • If you expect "nil" to be specified as the "f" parameter, you should test for this using the Assigned function. 
    • Fixing the "Incompatible type: 'method pointer and regular procedure'"
  • 相关阅读:
    Verilog HDL的程序结构及其描述
    VerilogHDL概述与数字IC设计流程学习笔记
    常用算法与设计模式
    DOM笔录
    JavaScript笔录
    Windows系统版本型号MSDN版、OEM版、RTM版、VOL版区别
    Yaml学习笔录
    Linux关闭iptables以及selinux
    Centos配置163YUM源
    utf8 和 UTF-8 在使用中的区别
  • 原文地址:https://www.cnblogs.com/shangdawei/p/3971930.html
Copyright © 2011-2022 走看看