如何在没有lambda expr

时间:2016-04-28 21:57:13

标签: c++11 lambda functor

我有以下代码:

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 参数做什么?

由于

1 个答案:

答案 0 :(得分:1)

您在正在创建的仿函数的构造函数中捕获,并将捕获变量作为参数传递给构造函数。最简单的方法是使用单独的类,而不是尝试重用您存在的对象。

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的实例通过。