zoukankan      html  css  js  c++  java
  • 注册回调

    背景

      总结一下在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");
    }
  • 相关阅读:
    Java 8简明教程
    Redis事务机制和分布式锁
    【 Tomcat 】tomcat8.0 基本参数调优配置-----(2)
    【 Tomcat 】tomcat8.0 基本参数调优配置-----(1)
    Nginx的一理解(2)
    Nginx的一理解(1)
    jav设计模之的动态代理
    Java设计模式之《适配器模式》及应用场景
    Java设计模式之三种工厂模式
    pytorch高阶op
  • 原文地址:https://www.cnblogs.com/orejia/p/12112737.html
Copyright © 2011-2022 走看看