【问题标题】:c++ In lambda function - error: invalid type argument in tbb::parallel_forc++ 在 lambda 函数中 - 错误:tbb::parallel_for 中的类型参数无效
【发布时间】: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-&gt;Stepper::step(...)
  • @AndrewTomazosFathomlingCorps - 没有parallel_for(和/或lambda表达式),它编译得很好。常规的 for 循环工作得很好。我现在将尝试使用 parallel_ 创建仿函数的旧方法。
  • 听起来像是一个损坏的编译器:stackoverflow.com/questions/7775537/…

标签: c++ gcc c++11 lambda


【解决方案1】:

我认为 lambda 引入器(又名捕获子句)是不正确的。我不太明白你想用“[this]”表达什么。请查看以下文章以了解正确的语法:http://msdn.microsoft.com/en-us/library/dd293603.aspx 希望这可以帮助! :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    相关资源
    最近更新 更多