2013-01-15 66 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(...)' –

回答