2013-01-15 45 views
0

新建TBB和C++ lambda表达式,并具有编译器错误在下面的代码:C++在lambda函数 - 错误:TBB无效的类型参数:: parallel_for时

template <class ObjT, class Stepper> 
class GroupStepper 
    : public Stepper { 

public: 
    typedef boost::shared_ptr<ObjT> obj_ptr; 

    void step() { 

     tbb::parallel_for (blocked_range<int> (0, objs_.size()), 
        [this] (const blocked_range<int>& r) { 
     for (int i=r.begin(), e=r.end(); i<e; ++i) { 
      Stepper::step (objs_[i], h_); 
     } 
     }); 
    }; 

private: 

    std::vector<obj_ptr>& objs_; 
    scalar     h_; 
}; 

用gcc编译v 4.5.1我。得到以下错误:

In lambda function: 

... error: invalid type argument 

... error: invalid type argument 

两者都指向Stepper :: step的输入参数。我猜测这个模板化的继承有一些与lambda不兼容的东西?

任何帮助得到这个东西的句柄将不胜感激。谢谢

+0

'Stepper :: step()'的签名是什么? –

+1

如果使用void step(){Stepper :: step(objs_ [0],h_)替换整个'GroupStepper :: step'函数,会发生什么? }'? –

+0

对于lambda表达式的支持在GCC 4.5中是新的,如果在解析这段代码的时候有bug的话,我不会感到惊讶。你应该在上面的注释中尝试一下建议,也可以尝试调用'this-> Stepper :: step(...)' –

回答