Использование функциональных объектов в parallel_for - PullRequest
3 голосов
/ 13 декабря 2010

Я только что научился использовать функцию параллельно. Следующая строка кода вычисляет квадратное значение индекса и помещает его в массив (называемый квадратами) по этому индексу. Функция parallel_for доступна в Visual Studio 2010 как часть пространства имен Concurrency под заголовком.

parallel_for(static_cast<size_t>(0), count, 
    [&squares](size_t n) { squares[n] = (n+1)*(n+1); });

Вы можете видеть, что оно использует лямбда-выражение для параллельного вычисления квадратов, и этот код работает и компилируется правильно. Однако лямбда-выражение загромождает функцию parallel_for кодом. Я думал просто определить лямбда-выражение внутри объекта функции, например:

function<void(size_t)> Squares = 
    [&squares](size_t n) { squares[n] = (n+1)*(n+1); };

Мой вопрос: как я могу использовать эту функцию (квадраты) в функции parallel_for? Я написал функцию Squares неправильно, или это просто парадигма параллельного_для использования лямбда-выражения? Вы можете пойти дальше и порекомендовать мне другие параллельные библиотеки, кроме Microsoft, но я все же хотел бы знать ответ на мой вопрос.

Ответы [ 2 ]

3 голосов
/ 13 декабря 2010

Любое лямбда-выражение можно рассматривать как анонимную версию соответствующего функционального объекта.

В вашем примере ваш функтор работает просто отлично, как показано ниже:

parallel_for(static_cast<size_t>(0), count, Squares);

Из документов MSDN :

Лямбда-выражение - это программирование Техника, которая связана с анонимным функции. Анонимная функция функция, которая имеет тело, но не имеет есть имя Лямбда-выражение неявно определяет объект функции класс и конструирует функциональный объект этого типа класса.

0 голосов
/ 13 декабря 2010

Все примеры форм MSFT напрямую используют Lambda.

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