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(...)' –