Как использовать QtConcurrent::run с перегруженной функцией

В настоящее время я пытаюсь распараллелить свой код, поэтому я использую QtConcurrent::run, и проблема в том, что run не знает, какую функцию выбрать.

Есть ли способ использовать run с перегруженной функцией или мне нужно найти какой-то обходной путь?


person Dänis    schedule 23.11.2016    source источник


Ответы (1)


Вы можете просто static_cast указать указатель, чтобы убедиться, что в процессе нет двусмысленности.

void hello(QString name)
{
    qDebug() << "Hello" << name << "from" << QThread::currentThread();
}

void hello(int age)
{
    qDebug() << "Hello" << age << "from" << QThread::currentThread();
}

int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    QFuture<void> f1 = run(static_cast<void(*)(QString)>(hello), QString("Alice"));
    QFuture<void> f2 = run(static_cast<void(*)(int)>(hello), 42);
    f1.waitForFinished();
    f2.waitForFinished();
}

или, альтернативно, получить указатель на правильный.

person Marco A.    schedule 23.11.2016
comment
хорошо, работает ли это для перегрузки типа: void hello(имя QString, int age){..} и void hello(имя QString){..} тоже? - person Dänis; 23.11.2016
comment
ок сам разобрался, просто пришлось использовать пространство имен перед функцией, вместо статического члена, который ее вызывал - person Dänis; 23.11.2016