Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <typename Function , typename ...Args>
- auto exceptionWrapper (Object *obj, Function&& function, Args&& ...args)-> decltype((obj->*function)(std::forward<Args>(args)...))
- {
- try
- {
- QScopedPointer<Object> tempObj(new Object(obj->getSomeData()));
- return (tempObj->*function)(std::forward<Args>(args)...);
- }
- catch(std::exception& e)
- {
- ...
- }
- }
- template <typename Function , typename ...Args, typename CallBack>
- void Object::callAsync(Object *obj,Function&& query,CallBack&& callBack, Args&& ...args)
- {
- using ReturnValue = decltype(exceptionWrapper(obj, query, std::forward<Args>(args)...));
- QFutureWatcher<ReturnValue> watcher;
- connect(&watcher, &QFutureWatcher <ReturnValue>::finished, callBack);
- QFuture<ReturnValue> futureValue = QtConcurrent::run(exceptionWrapper, obj, query, std::forward<Args>(args)...);
- watcher.setFuture(futureValue);
- }
- Object object = new Object();
- Object::callAsync(object, Object::objFcn, [](){qDebug()<<"qq";}, arg1, arg2);
- ошибка: no matching function for call to 'run(<unresolved overloaded function type>, BOKZDatabase*&, AngleOrientData (BOKZDatabase::*&)(const QString&, const QString&, const QString&, const QString&, int), const QString&, const QString&, const QString&, const QString&, const int&)'
- QFuture<ReturnValue> futureValue = QtConcurrent::run(exceptionWrapper, db, query, std::forward<Args>(args)...);
- ^
- template <typename Function , typename ...Args, typename CallBack>
- void Object::callAsync (Object *obj,Function&& query,CallBack&& callBack, Args&& ...args)
- {
- using ReturnValue = decltype(exceptionWrapper(obj, query, args...));
- QFutureWatcher<ReturnValue> watcher;
- connect(&watcher, &QFutureWatcher <ReturnValue>::finished, callBack);
- QFuture<ReturnValue> futureValue = QtConcurrent::run(exceptionWrapper <Function, Args...>, obj, std::forward<Function>(query), std::forward<Args>(args)...);
- watcher.setFuture(futureValue);
- }
- class Object
- {
- public:
- int sum(int a, int b)
- {
- return a+b;
- }
- };
- template <typename Function , typename ...Args>
- auto fcn (Object *object, Function&& function, Args&& ...args)-> decltype ((object->*function)(std::forward<Args>(args)...))
- {
- return (object->*function)(std::forward<Args>(args)...);
- }
- template <typename Function , typename ...Args>
- void callAsync(Object *object,Function&& function, Args&& ...args)
- {
- QtConcurrent::run(fcn <Function, std::forward<Args...>>, object, function, std::forward<Args>(args)...);
- }
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- Object* obj = new Object();
- callAsync(obj, Object::sum, 5, 6);
- return a.exec();
- }
- QtConcurrent::run(exceptionWrapper<Function, Args...>, obj, std::forward<Function>(query), std::forward<Args>(args)...);
- int var = 5;
- callAsync(obj, &Object::sum, 7, var);
- template <typename Function , typename ...Args>
- auto fcn(Object *object, Function function, const Args& ...args)
- {
- return (object->*function)(args...);
- }
- template <typename Function , typename ...Args>
- void callAsync(Object *object, Function&& function, Args&& ...args)
- {
- QtConcurrent::run(fcn<Function, Args...>, object, function,
- std::forward<Args>(args)...);
- }
Add Comment
Please, Sign In to add comment