• 注册回调


    背景

      总结一下在c,c++里注册回调的几种用法

    用法

    c语言

    #include <iostream>                                                                                                                   
    
    using namespace std;
    
    int demo(char *str1, char *str2)
    {
        printf("print in demo(): %s, %s
    ",
                str1, str2);
        return 0;
    }
    
    int main()
    {
        //指针类型定义
        typedef int (*FuncType)(char*, char*);
    
        //函数指针定义
        FuncType func = demo;
    
        //调用
        func("hello", "world");
    }

    boost::function

    #include <iostream>
    #include "boost/function.hpp"
    
    int demo(char *str1, char *str2)
    {
        printf("print in demo(): %s, %s
    ",
                str1, str2);
        return 0;
    }
                                                                                                                                          
    int main()
    {
        boost::function<int(char*, char*)>  func(demo);
        func("111", "222");
    }

    boost::bind

    #include <iostream>
    #include "boost/thread.hpp"
    
    using namespace std;
    
    int demo(char *str1, char *str2)
    {
        sleep(2);//two seconds
        printf("print in demo(): %s, %s
    ",
                str1, str2);
        return 0;
    }
                                                                                                                                          
    int main()
    {
        boost::thread mythread(boost::bind(&demo, "1", "2"));
    
        mythread.join();
        printf("thread over
    ");
    }

    std::function (c++11)

    #include <iostream>                                                                                                                   
    #include <functional>
    
    using namespace std;
    
    int demo(char *str1, char *str2)
    {
        printf("print in demo(): %s, %s
    ",
                str1, str2);
        return 0;
    }
    
    int main()
    {
        function<int(char*, char*)> func = demo;
        func("111", "222");
    }

    std::function (c++11) 绑定类静态成员函数

    #include <iostream>
    #include <functional>
    
    using namespace std;
    
    class demo
    {
    public:
        static int demo_func(char *str)
        {   
            printf("print in demo_func: %s
    ", str);
            return 0;
        }   
    };
    
    int main()
    {
        function<int(char*)> func = demo::demo_func;
        func("hello world");
    }

    std::function (c++11) 绑定函数对象或仿函数

    #include <iostream>                                                                                                                   
    #include <functional>
    
    using namespace std;
    
    class Foo {
    public:
        int operator()(char *str1, char *str2)
        {   
            printf("print in demo(): %s, %s
    ",
                    str1, str2);
            return 0;
        }   
    };
    
    int main()
    {
        Foo foo;
        function<int(char*, char*)> func;
        func = foo;
        func("111", "222");
    }
  • 相关阅读:
    【学习笔记】《架构整洁之道》(2)
    【学习笔记】《架构整洁之道》(1)
    《漫长的婚约》
    My 2020 work schedule
    canal-clientadapter 数据同步实验
    confluence异常关闭恢复
    nginx 添加第三方nginx_upstream_check_module 模块实现健康状态检测
    keepalived问题阐述及配置
    keepalived+lvs 部署
    lvs基础
  • 原文地址:https://www.cnblogs.com/orejia/p/12112737.html
Copyright © 2020-2023  润新知