https://blog.actorsfit.com/a?ID=00850-ca43f315-3160-4fca-b10b-5861f8ea566a
3.2 Implementation using lambda expressions
Using lambda expressions can simplify this process. Refer to the following piece of code, classB registers a member function as a callback function to classA, and classA saves this callback function (std::function object) to member variables for later use use,
#include <iostream> #include <functional> #include <memory> class classA { typedef std::function<void(int i)> callback_t; public: classA() {} ~classA() {} void handle(int i) { std::cout << "classA::handle" << std::endl; cbHandle(i); } void registCb(callback_t func) {cbHandle = std::move(func);} private: callback_t cbHandle; }; class classB { public: classB(classA& cA) { cA.registCb([this](int i){classB::handle(i);}); } ~classB() {} void handle(int i) { std::cout << "classB, handle message" << i << std::endl; } }; int main() { classA testa; classB testb(testa); testa.handle(10); }