使用回调函数(且我们传入的回调函数是非静态的)


先宏定义一个回调函数

注意,我们下想在哪个类里面调用,就必须要把Chat改成自己类的名字(我是在chat这个界面调用的)

// 这里我们定义一个回调函数用于不断监听客户端发送过来的数据)
// 这里因为我们是调用非静态成员,所以我们需要给这个函数加上我们回调函数的类
typedef void (Chat::*Receive)(std::string);

定义一个函数,这个函数可以传入回调函数

// 这里我们初始化服务端,当有消息发送的时候会触发回调函数(这里我们需要传入端口号)
 static void startService(Chat *chat,Receive receive,int port);

这个函数触发回调函数的逻辑如下

// 触发回调函数,把我们接受到的数据传入
// 这里因为是触发非静态成员,所以我们这里就把 (chat->*receive) 当成了一个函数整体
(chat->*receive)(recv_buf);

然后我们需要调用函数并把我们需要回调的函数传进去

 // 启动服务
SocketUtil::startClientBack(this,&Chat::newDataRead,port,address);

我们的回调函数定义如下

// 当我们的socket获取到数据的时候,调用这个函数
void Chat::newDataRead(std::string data) {
    // 列表显示数据
    QString show = "对方:";
    // 这里加上我们收到的数据
    show.append(QString::fromStdString(data));
    // 消息到列表中
    addData(show);
}

文章作者: 小游
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小游 !
  目录