回调函数在面向过程的C语音中就存在,主要是通过函数指针实现函数的回调。大部分回调函数的参数都为全局函数或类的静态函数(主要是回调时候指针位置需要加上类位置偏移,而类位置偏移又不唯一),但这样对类的封装性影响很大,在C++ 11 中引入的Bind函数很好的解决了这个问题。
如在Qt中使用浏览器控件类QWebEngine
typedef std::function<void(QString)> Fun; // 定义函数指针
AClass::AClass(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
mWebView = new QWebEngineView();
// 绑定函数指针,由于bind函数在C++ 11标准中,所以记得添加头文件#include <functional>
Fun onGetStringFun = std::bind(&OtherLoginDialog::onGetString, this, std::placeholders::_1);
mWebView->page()->toPlainText(onGetStringFun);
}
void AClass::onGetString(QString msg)
{
// 写获取到内容
}