本文共 2377 字,大约阅读时间需要 7 分钟。
#includevoid printWelcome(int len) { printf("welcome -- %d\n", len); } void printGoodbye(int len) { printf("byebye-- %d\n", len); } void callback(int times, void (* print)(int)) { int i; for (i = 0; i < times; ++i) { print(i); } printf("\n welcome or byebye !\n"); } void main(void) { callback(10, printWelcome); callback(10, printGoodbye); }
#include#include using namespace std; using namespace std::placeholders; typedef std::function Fun; class B{ public: void call(int a,Fun f) { f(a,2); } }; class Test{ public: void callback(int a,int b) { cout< <<"+"<<<"="< <
一般常用语法是: newFunName=bind(oldFunName,arg_list);
//g是一个有两个参数的可调用对象 auto g=bind(f,a,b,_2,c,_1); //其中f是具有5个参数的函数 //当我们调用g(x,y)时,实际调用的是f(a,b,y,c,x)
上面出现的_1,_2是它的占位符,bind最多可以使用9个占位符。这个占位符命名在std的placeholders中,使用时,要使用using std::placeholders.
function是一个函数对象的“容器”。
#include#include using namespace std; typedef std::function fp; void g_fun() { cout<<"g_fun()"< fpi; //对于参数要使用占位符 std::placeholders::_1 fpi f=std::bind(&A::A_fun_int,this,std::placeholders::_1); f(5); } }; int main() { //绑定到全局函数 fp f2=fp(&g_fun); f2(); //绑定到类静态成员函数 fp f1=fp(&A::A_fun_static); f1(); A().init(); A().init2(); return 0; }