文件结构如下:两个类(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来实现功能了~