如何在没有 lambda expr 的情况下正确重写 C++11 lambda 表达式
How can I properly re-write C++11 lambda expression without lambda expr
我有以下代码:
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);
}
但它没有解决捕获列表问题。
如何重写 lambda 表达式?我可以用 var1, list, list2 参数做什么?
谢谢
您在正在创建的仿函数的构造函数中进行捕获,并将捕获变量作为参数传递给构造函数。最简单的方法是使用单独的 class,而不是尝试重用您所在的对象。
class MyFunctor
{
Variant& x; int& y; vector& z; vector& foo;
public:
MyFunctor(Variant& x, int& y, vector& z, vector& foo) : x(x), y(y), z(z), foo(foo) {};
void operator()(const tbb::blocked_range<std::size_t> &range)
{
/* use x, y, z and foo here */
}
}
然后让 init
创建一个 MyFunctor
的实例通过。
我有以下代码:
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);
}
但它没有解决捕获列表问题。
如何重写 lambda 表达式?我可以用 var1, list, list2 参数做什么?
谢谢
您在正在创建的仿函数的构造函数中进行捕获,并将捕获变量作为参数传递给构造函数。最简单的方法是使用单独的 class,而不是尝试重用您所在的对象。
class MyFunctor
{
Variant& x; int& y; vector& z; vector& foo;
public:
MyFunctor(Variant& x, int& y, vector& z, vector& foo) : x(x), y(y), z(z), foo(foo) {};
void operator()(const tbb::blocked_range<std::size_t> &range)
{
/* use x, y, z and foo here */
}
}
然后让 init
创建一个 MyFunctor
的实例通过。