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