Java implementation mode
public interface CallBack { public void execute(); } public void test(CallBack callBack){ System.out.println("callback"); callBack.execute(); } test(new CallBack() { @Override public void execute() { System.out.println("callback implement"); } });
Implementation of c++
The callback function is a normal function
typedef void (*CaptureCallback)(string); void capturePic(CaptureCallback callback){ string t = "a pic"; callback(t); } void renderPic(string t){ print(t); } capturePic(renderPic);
The callback function is a member function
typedef std::function<void (string)> CaptureCallback; class CaptureController{ public: CaptureCallback callback; CaptureController(CaptureCallback callback):callback(callback){}; void capturePic(CaptureCallback callback){ string t = "a pic"; callback(t); } } class UI{ //Start capturing images void startCapture(){ CaptureController c(std::bind(&UI::renderPic,this,_1)); c.capturePic(); } //Render the picture as a callback function void renderPic(string t){ print(t); } } //main.cpp UI ui; ui.startCapture();
std::function
typedef std::function<void (string)> CaptureCallback;
std::bind
CaptureCallback callback = std::bind(&UI::renderPic,this,_1); callback("test");
void renderPic(string t,int a,char b); CaptureCallback callback = std::bind(&UI::renderPic,this,_1,2,'b'); callback("test");
The callback function can be either a normal function or a member function
The callback function does not have to be used
Method 1
void startCapture(){ string t; CaptureController c(); c.capturePic(t);// Parameter is a reference to string renderPic(t); } void renderPic(string t){ print(t); }
Method 2