Я пытаюсь использовать parallel_for, но я получаю ошибку, код:
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <ppl.h>
using namespace std;
using namespace concurrency;
int _tmain(int argc, _TCHAR* argv[])
{
parallel_for(size_t(0), 50, [&](size_t i)
{
cout << i << ",";
}
cout << endl;
getchar();
return 0;
}
Ошибка:
IntelliSense: ни один экземпляр перегруженной функции «parallel_for» не соответствует списку аргументов> типы аргументов: (size_t, int, lambda [] void (size_t i) -> void
Это всего лишь пример, я должен использовать его в большем проекте, но прежде всего я хочу понять, как правильно его использовать.
*редактировать*
я изменил код на:
parallel_for(size_t(0), 50, [&](size_t i)
{
cout << i << ",";
});
но все же я получаю досадную ошибку:
IntelliSense: ни один экземпляр перегруженной функции «parallel_for» не соответствует типам аргументов списка аргументов: (size_t, int, lambda [] void (size_t i) -> void)
parallel_for
имеет прототип
template <typename T, typename F>
void parallel_for(
T first,
T last,
F& f,
const auto_partitioner& _Part = auto_partitioner()
);
T
выводится из first
а также last
но вы даете это size_t
а также int
изготовление T
неоднозначный.
Также есть другие перегруженные функции parallel_for
и MSVC генерирует глупое сообщение об ошибке в таком случае.
Решение 1:
int _tmain(int argc, _TCHAR* argv[])
{
parallel_for(size_t(0), size_t(50), [&](size_t i)
{
cout << i << ",";
});
cout << endl;
getchar();
return 0;
}
Решение 2:
parallel_for<size_t>(size_t(0), 50, [&](size_t i)
{
cout << i << ",";
});
Других решений пока нет …