QT, параллельное программирование и передача параметров в функцию - PullRequest
2 голосов
/ 19 июня 2011

У меня есть QList и я хочу обрабатывать все его элементы параллельно.Проблема в том, что мне нужно передать аргумент my_function.Код ниже не позволяет этого.

QList<something> output = QtConcurrent::blockingMapped(
    input,
    my_function
);

Я могу использовать отдельную функцию для каждого набора параметров.Я также могу использовать глобальную переменную.Я тоже могу попробовать переписать сборку в функции QT.Однако должно быть лучшее решение.Есть идеи?

Ответы [ 2 ]

4 голосов
/ 19 июня 2011

Предполагая, что аргумент, который вы хотите передать функции, не зависит от элементов, вы можете создать функтор, который расширяет std::unary_function<const something&,void>, конструктор которого принимает аргумент, который вы хотите передать ему. Затем используйте функтор, где вы будете использовать функцию. Например.,

struct MyFunctor : public std::unary_function<const something&,void> {
public:
  myFunctor(int s) { _i = i; }
  void operator()(something& str) {
    something.apply(_i);
  }
private:
  int _i;
};

…

MyFunctor myFunctor(i);
QList<something> output = QtConcurrent::blockingMapped(
    input,
    myFunctor
);
1 голос
/ 19 июня 2011

Какой аргумент вам нужно передать функции?Вы не можете напрямую сделать это.Что вы можете сделать, это передать аргумент в другую структуру с operator(), из которой вы можете получить доступ к аргументу.То есть, если вы не хотите использовать глобальное значение.

Посмотрите на примеры здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...