文件结构如下:两个类(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 #includeA.cpp#include #include typedef std::function Callback; class A { public: void funcA(); void funcB(); }; #endif
#includeB.h#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; }
#ifndef B_H #define B_H #includeB.cpp#include using namespace std; typedef function Callback; class B { public: void funcC(Callback callback); }; #endif
#includetest.cppusing namespace std; #include"B.h" void B::funcC(Callback callback) { cout << "Function C" << endl; callback(); }
#include#include"A.h" #include"A.cpp" using namespace std; int main() { A a; a.funcA(); system("pause"); return 0; }
运行结果如下:
注意:因为是单个文件,不是一个项目。在部分文件的include部分引用了cpp文件。否则会报错未定义。
跨文件的可以参考上文,单个文件的回调实现可以参考:这篇文章
其实通过函数指针也能够实现回调函数的功能,但常规的函数指针对于类内成员函数无法进行回调(不能将类内成员函数作为回调函数)。这种情况就要使用std::function来实现功能了~



