【发布时间】:2020-06-06 04:07:37
【问题描述】:
我有 C++ 类,它是模板。它具有成员函数,应该以任何 lamda 作为参数;
基本上这就是我想做的:-
#include <QFuture>
#include <QFutureWatcher>
template <class T>
class EFuture {
private:
QFuture<T> future;
QFutureWatcher<T> watcher;
public:
explicit EFuture(QFuture<T> &future);
void onFinished(void (*f)() );
};
template <class T>
EFuture<T>::EFuture(QFuture<T> &future ): future(future)
{ }
template<class T>
void EFuture<T>::onFinished(void (*f)()){
QObject::connect(watcher,&QFutureWatcher<T>::finished,f);
watcher.setFuture(future);
}
这有严重的限制,因为我无法在我传递的 lambda 中捕获任何内容。 我尝试做这样的事情:-
future->onFinished([someobject](){
...
});
我收到以下错误:-
connectionworker.cpp:106:24: error: no viable conversion from '(lambda at /home/noone/Development/Exatation/Exever/src/connectionworker.cpp:106:24)' to 'void (*)()'
efuture.h:17:28: note: passing argument to parameter 'f' here
【问题讨论】:
-
改用
void onFinished(std::function<void()> f); -
@PiotrSkotnicki 谢谢。它奏效了
标签: c++ c++11 templates lambda