注册回调

背景

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

用法

c语言

#include <iostream>                                                                                                                   

using namespace std;

int demo(char *str1, char *str2)
{
    printf("print in demo(): %s, %s\n",
            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\n",
            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\n",
            str1, str2);
    return 0;
}
                                                                                                                                      
int main()
{
    boost::thread mythread(boost::bind(&demo, "1", "2"));

    mythread.join();
    printf("thread over\n");
}

std::function (c++11)

#include <iostream>                                                                                                                   
#include <functional>

using namespace std;

int demo(char *str1, char *str2)
{
    printf("print in demo(): %s, %s\n",
            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\n", 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\n",
                str1, str2);
        return 0;
    }   
};

int main()
{
    Foo foo;
    function<int(char*, char*)> func;
    func = foo;
    func("111", "222");
}

猜你喜欢

转载自www.cnblogs.com/orejia/p/12112737.html