自己平时常用到的C++回调方式主要为两类
- 通过设置函数指针的方式
- 通过集成接口的方式(Sink下沉)
一. 设置接口sink的方式
一般都是由一个消息接口类,作为回调,需要处理返回回调的信息的类,只需要继承接口类,并实现对应的方法即可。初始化时,只需要将子类设置下去,待任务完成时,就可以实现回调。
简单的模仿一下文件传输,ITaskCallback为消息回调接口,需要该消息回调的类,只需要继承该接口,即可。例如FTPTask。
#include <iostream>
#include <random>
#include <ctime>
class ITaskCallback
{
public:
virtual void on_process_result(std::string data) = 0;
};
//模拟任务线程的处理,例如ftp,传入FTPTask,设置sink下沉回调。
class TaskProcessing
{
public:
TaskProcessing(ITaskCallback* callback) : _callback(callback)
{};
void set_callback(ITaskCallback* callback)
{
_callback = callback;
};
//模拟将文件传输完成
void do_task()
{
//当文件传输完成
if (_callback)
{
srand((int)time(NULL));
if (rand() & 1)
{
_callback->on_process_result(std::string("ftp succeed