У меня есть следующий код:Как правильно переписать C++ 11 лямбда-выражение без лямбда выраж
class Variant
{
public:
void init();
}
void Variant::init()
{
int var 1;
vector list;
vector list2;
tbb::parallel_for(tbb::blocked_range<std::size_t>(0, list.size(), ClrSize),
[this, &var1, &list,&list2](const tbb::blocked_range<std::size_t> &range)
{
/*some code here*/
}
Я думал о реализации operator()(const tbb::blocked_range<std::size_t> &range)
class Variant
{
public:
void operator()(const tbb::blocked_range<std::size_t> &range)
{
/*some code here*/
}
void init();
}
void Variant::init()
{
int var 1;
vector list;
vector list2;
tbb::parallel_for(tbb::blocked_range<std::size_t>(0, list.size(), ClrSize), this);
}
, но это не решает проблема списка захвата.
Как я могу переписать выражение лямбда? Что я могу сделать с var1, list, list2 arguments?
Благодаря
Вы имели в виду, что я должен использовать такой код? * tbb :: parallel_for (tbb :: blocked_range (0, list.size(), ClrSize), MyFunctor (x, y, z, foo)) * –
Deachy
@Deachy: Ну, в вашем случае, я думаю, что аргументы пройдены 'MyFunctor' будет' * this, var1, list, list2', но да, это идея; C++ 11 lambdas - это просто синтаксический сахар для анонимных определений функторов, которые связывают переменные (аргументы с конструктором, которые становятся членами экземпляра functor) и предоставляют метод 'operator()', который может использовать эти захваченные переменные. – ShadowRanger