在最新的C++11中,引入了std::function和std::bind,让我们更方便使用回调函数(这样回调函数就不必是static的了)
一
声明指针函数,模板类
Common.h
#include <functional> //一定要
typedef std::function<void(int)> Fun;
这个功能是与 typedef void(*CallbackFun)(int a);功能一样的
二
A.h
#pragma once
#include "Common.h"
class A
{
public:
A();
~A();
void todo();
void registerCallback(Fun fun);
private :
Fun myFun;
};
A.cpp
#include "A.h"
A::A()
{
}
A::~A()
{
}
void A::registerCallback(Fun fun)
{
myFun = fun;
}
void A::todo()
{
myFun(666);
}
三
B.h
#pragma once
class B
{
public:
B();
~B();
void TestA(int aa);
};
B.cpp
#include "B.h"
#include "A.h"
#include <iostream>
#include <functional>
using namespace std;
B::B()
{
A *a = new A();
Fun fun = std::bind(&B::TestA,this,placeholders::_1);
a->registerCallback(fun);
a->todo();
}
B::~B()
{
}
void B::TestA(int aa)
{
cout << "BBBB:" << aa;
}
int main()
{
B b;
getchar();
}
这个与C++回调函数对照着看,其实是一样的,只不多声明的时候用了std::function, 注册的时候不用一定是static了,可以用std::bind中转一下