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");
    }
  • 相关阅读:
    C#读取Excel日期时间
    软件需求3个层次――业务需求、用户需求和功能需求
    软件开发中的基线
    软件开发过程(CMMI/RUP/XP/MSF)是与非
    第1章项目初始.pdf
    计算机鼓轮
    概念模型,逻辑模型,物理模型
    第0章项目管理概述.pdf
    C#中提供的精准测试程序运行时间的类Stopwatch
    Installing and configuring OpenSSH with pam_ldap for RedHat Enterprise Linux3
  • 原文地址:https://www.cnblogs.com/orejia/p/12112737.html
Copyright © 2011-2022 走看看