C++11中如何使用std::function和std::bind 包装一个类的成员函数来使用,以及如何调用QtConcurrent框架并行执行任务
std::function是一个可调用对象包装器,是一个类模板,可以容纳除了类成员函数指针之外的所有可调用对象,它可以用统一的方式处理函数、函数对象、函数指针,并允许保存和延迟它们的执行。
QList<int> ls;
ls << 1 << 2 << 3 << 4 << 5;
qDebug() << ls;
auto func1 = std::bind(&QWidget_tt::test, this);
func1();// 正确
QtConcurrent::blockingMap(ls, func1);// 正确
qDebug() << "=========";
std::function<void(QWidget_tt*) > func2 = std::bind(&QWidget_tt::test,std::placeholders::_1);
func2(this); // 正确
//“_Ret std::_Func_class<_Ret,QWidget_tt *>::operator ()(QWidget_tt *) const”: 无法将参数 1 从“T”转换为“QWidget_tt *”
QtConcurrent::blockingMap(ls, func2 ); //编译报错
qDebug() << "=========";
//std::function<void(QWidget_tt*) > func3 = std::bind(&QWidget_tt::test,this); //错误 bind函数预绑定的参数是以值传递的形式,可能是这个问题这里报错误了
//func3(); //错误