C++11 回調函數

在最新的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中轉一下

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章