zoukankan      html  css  js  c++  java
  • c++回调函数

    回调函数,也就是我们说实现观察者模式、异步编程的关键之处,在java中一般通过匿名类实现比较多,在c/c++中,除非使用正规的OO实现,有不少都采用函数指针的方式实现,尤其是有些情况下可能还不允许随便使用对象。其基本用法如下。

    定义相关接口:

    void callbackFunc(char *);
    // 定义接收函数指针作为参数的函数
    void callbacker(char *,void (*fptr) (char *));
    
    typedef void (*CALLBACKER) (char*);
    // 定义接收函数指针作为参数的函数, 别名方式
    void callbacker1(char *,CALLBACKER);
    
     callbackFunc(char * str) {
    	cout << str << endl;
    }
    
    void callbacker(char * str,void (*fptr)(char *)){
    	(*fptr)(str);
    }
    
    void callbacker1(char * str,CALLBACKER fptr){
    	(*fptr)(str);
    }

    调用:

    int _tmain(int argc, _TCHAR* argv[])
    {
        vector<char*> vf;
        vf.push_back("one");
        vf.push_back("two");
        vf.push_back("three");int fi=0;
        void (*func)(char *) = callbackFunc;
        CALLBACKER pfunc = callbackFunc;
        for(fi =0; fi<vf.size(); fi++) {
            callbacker(vf[fi],func);
            callbacker1(vf[fi],pfunc);
        }
    }

    输出如下:

    one
    one
    two
    two
    three
    three

    典型的,使用较多的另外一种情形是传递一个指向函数的指针数组,适合于比如风控计算的情况,对于不同的值或者类别,不同的函数实现,这样可以同时达到既多态、又不需要引入类的结果。可参考如下:

    http://blog.csdn.net/feitianxuxue/article/details/7300291

  • 相关阅读:
    ab访问并发测试简要步骤
    使用sysbench 进行msyql oltp压力测试
    pycham database查看db.sqlites文件 无内容解决方法
    mysql 批量修改字段方法
    mysql row日志格式下 查看binlog sql语句
    shiro自定义过滤器
    shiro【filter】
    js 中时间格式化的几种方法
    @Value("#{}")与@Value("${}")的区别
    IDEA 代码格式化,快捷键
  • 原文地址:https://www.cnblogs.com/zhjh256/p/6349819.html
Copyright © 2011-2022 走看看