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不兼容的东西?
任何帮助得到这个东西的句柄将不胜感激。谢谢
'Stepper :: step()'的签名是什么? –
如果使用void step(){Stepper :: step(objs_ [0],h_)替换整个'GroupStepper :: step'函数,会发生什么? }'? –
对于lambda表达式的支持在GCC 4.5中是新的,如果在解析这段代码的时候有bug的话,我不会感到惊讶。你应该在上面的注释中尝试一下建议,也可以尝试调用'this-> Stepper :: step(...)' –