Учитывая определенную задержку, я хотел бы запустить функцию-член из класса X, передав QRunnable глобальному экземпляру QThreadPool. Конструктор подкласса QRunnable будет принимать задержку int, указатель экземпляра, указатель функции-члена и аргументы функции.
Мне было интересно, как мне поступить. У меня есть следующий код, и я застрял на том, как решить эту проблему.
template<typename I, typename F, typename ...Args>
class Task : public QRunnable{
public:
Task(int delay, I &&instance_ptr, F &&func_ptr, Args &&... args):
delay(delay),
instance_ptr(std::forward<I>(instance_ptr)),
func_ptf(std::forward<F>(func_ptr)),
args_tuple(std::forward<Args>(args)...)
{}
void run() override
{
QThread::sleep(delay);
(instance_ptr->*func_ptr)(args_tuple) // This is where i don't know how to unpack the tuple
}
private:
int delay;
I instance_ptr;
F func_ptr;
std::tuple<Args...> args_tuple;
}