C++:std::function和std::bind实现跨文件回调函数

  文件结构如下:两个类(A,B) 分别对应h和cpp(A.h A.cpp B.h B.cpp),A中定义两个函数funcA和funcB, B中定义funcC。funcA调用funcC,funcC调用funcB。funcC调用funcB使用回调函数思路,在funcA调用funcC时就传入funcB的函数指针。test.cpp是外界调用。具体的源代码如下:

A.h
#ifndef A_H
#define A_H
#include<iostream>
#include<functional>
#include<memory>
typedef std::function<void()> Callback;

class A {
    public:
        void funcA();
        void funcB();
};
#endif
A.cpp
#include<iostream>
#include"A.h"
#include"B.h"
#include"B.cpp"
using namespace std;

void A::funcA() {
    cout << "Function A" << endl;
    shared_ptr<A> brain  = make_shared<A>();
    Callback callback = bind(&A::funcB, brain);
    B b;
    b.funcC(callback);
}

void A::funcB() {
    cout << "Function B" << endl;
}
B.h
#ifndef B_H
#define B_H
#include<iostream>
#include<functional>
using namespace std;
typedef function<void()> Callback;

class B {
    public:
        void funcC(Callback callback);
};

#endif
B.cpp
#include<iostream>
using namespace std;
#include"B.h"

void B::funcC(Callback callback) {
    cout << "Function C" << endl;
    callback();
}
test.cpp
#include<iostream>
#include"A.h"
#include"A.cpp"
using namespace std;

int main() {
    A a;
    a.funcA();
    system("pause");
    return 0;
}

运行结果如下:
在这里插入图片描述

注意:因为是单个文件,不是一个项目。在部分文件的include部分引用了cpp文件。否则会报错未定义。

跨文件的可以参考上文,单个文件的回调实现可以参考:这篇文章

其实通过函数指针也能够实现回调函数的功能,但常规的函数指针对于类内成员函数无法进行回调(不能将类内成员函数作为回调函数)。这种情况就要使用std::function来实现功能了~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值