【发布时间】:2012-12-30 02:49:25
【问题描述】:
c++ 中的 tbb 和 lambdas 新手,并且在以下代码中出现编译器错误:
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函数会发生什么? -
对 lambdas 的支持是 GCC 4.5 中的新功能,如果在解析此代码时出现错误,我不会感到惊讶。您应该尝试上面评论中的建议,也可以尝试致电
this->Stepper::step(...) -
@AndrewTomazosFathomlingCorps - 没有parallel_for(和/或lambda表达式),它编译得很好。常规的 for 循环工作得很好。我现在将尝试使用 parallel_ 创建仿函数的旧方法。
-
听起来像是一个损坏的编译器:stackoverflow.com/questions/7775537/…