栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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
#include
#include
typedef std::function Callback;

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

void A::funcA() {
    cout << "Function A" << endl;
    shared_ptr brain  = make_shared();
    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
#include
using namespace std;
typedef function Callback;

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

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

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

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

运行结果如下:

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

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

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

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号