注册回调
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"); }
以上是关于注册回调的主要内容,如果未能解决你的问题,请参考以下文章