#include<stdio.h>  
   
void 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);  
} 
Test类中的bind函数调用B类中的call函数,b中的call函数又反过来回调Test类中的callback函数。bind函数和function函数,这两个函数之前是boost函数成员,现在加入到c++11标准中。

#include <iostream>  
  
#include <functional>  
  
using namespace std;  
using namespace std::placeholders;  
  
typedef std::function<void(int,int)> Fun;  
  
class B{  
    public:  
        void call(int a,Fun f)  
        {  
            f(a,2);  
        }  
};  
  
class Test{  
public:  
    void callback(int a,int b)  
    {  
        cout<<a<<"+"<<b<<"="<<a+b<<endl;  
    }  
  
    void bind()  
    {  
        Fun fun=std::bind(&Test::callback,this,_1,_2);  
        B b;  
        b.call(1,fun);  
    }  
  
};  
int main()  
{  
    Test test;  
    test.bind();  
    return 0;  
}