注册回调

Posted orejia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了注册回调相关的知识,希望对你有一定的参考价值。

背景

  总结一下在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");
}

以上是关于注册回调的主要内容,如果未能解决你的问题,请参考以下文章

从片段替换片段时,onRequestPermissionsResult 回调不起作用

从 DialogFragment 回调片段

如何从活动中传递回调到片段

当活动被破坏但我必须继续执行片段中的代码时该怎么办?

android片段中的Razorpay回调不起作用

片段上下文不是回调实例