• Java程序猿学习C++之函数指针


    函数指针的定义:



    头文件:function.h

    //该头文件定义了接口,在实际的源文件里定义了模板方法
    //兴许的调用类仅仅须要实现覆盖before。process,after方法就可以实现模板方法的回调
    
    
    /*
    	extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件里。
    	提示编译器遇到此变量或函数时。在其他模块中寻找其定义。

    */ extern void(*before)(); extern void(*process)(int,int); extern void(*after)(); void my_function(int a,int b);



    源文件main.cpp

    #include "function.h"
    #include <iostream>
    using namespace std;
    
    extern void dosth();
    
    //static标记该方法的作用域为该模块(文件)内
    static void before_pro()
    {
    	cout << "main.before_pro" << endl;
    }
    
    static void process_pro(int a, int b)
    {
    	cout << "main.process_pro" << endl;
    }
    
    static void after_pro()
    {
    	cout << "main.after_pro" << endl;
    }
    
    //void my_function(int a, int b)
    //{
    //	before();
    //	process(a, b);
    //	after();
    //}
    
    int main()
    {
    	before = before_pro;
    	process = process_pro;
    	after = after_pro;
    	my_function(2,3);
    	dosth();
    	return 0;
    }
    
    
    

    源文件:test.cpp

    #include <iostream>
    #include "function.h"
    using namespace std;
    
    void(*before)();
    void(*process)(int, int);
    void(*after)();
    
    static void before_pro()
    {
    	cout << "test.before_pro" << endl;
    }
    
    static void process_pro(int a, int b)
    {
    	cout << "test.process_pro" << endl;
    }
    
    static void after_pro()
    {
    	cout << "test.after_pro" << endl;
    }
    
    void dosth()
    {
    	before = before_pro;
    	process = process_pro;
    	after = after_pro;
    	my_function(2, 3);
    }
    
    void my_function(int a, int b)
    {
    	before();
    	process(a, b);
    	after();
    }
    


  • 相关阅读:
    <转>程序员的心理疾病
    lua与c++ 中布尔布bool值对应关系
    php根据身份证号码计算年龄
    Java中List与Map初始化的一些写法
    在ASP.NET中发送电子邮件的实例教程
    C#中Messagebox.Show()常用参数用法详解
    Js判断CSS文件加载完毕的实例教程
    PHP CURL访问HTTPS使用详解
    下拉导航菜单被遮住解决办法
    Struts2基本包作用详解
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6950502.html
Copyright © 2020-2023  润新知