2013-01-15 4 views
0

새로운 parallel_for 다음 코드에 TBB 및 C++의 람다와 가진 컴파일러 에러 :C++ - 오류 : TBB에 잘못된 형식 인수 ::

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 I. 다음과 같은 오류가 발생합니다.

In lambda function: 

... error: invalid type argument 

... error: invalid type argument 

둘 다 Stepper :: step의 입력 인수를 참조합니다. 람다와 잘 어울리지 않는 템플릿 기반의 상속에 대해 뭔가있는 것 같습니까?

이 물건을 다루는 데 도움이된다면 크게 감사하겠습니다. 감사합니다

+0

'Stepper :: step()'의 서명은 무엇입니까? –

+1

전체'GroupStepper :: step' 함수를'void step() {Stepper :: step (objs_ [0], h_); }'? –

+0

lambda에 대한 지원은 GCC 4.5에서 새롭다.이 코드를 파싱 할 때 버그가 있다면 놀랄 일이 아니다. 위의 주석에서 제안을 시도하고'this-> Stepper :: step (...) '을 호출 해 볼 수도 있습니다. –

답변

0

나는 람다 introducer (일명 캡처 절)가 잘못되었다고 생각합니다. 나는 당신이 "[this]"를 사용하여 표현하고자하는 것을 전혀 보지 못합니다. 올바른 구문에 대해서는 다음 문서를 참조하십시오. http://msdn.microsoft.com/en-us/library/dd293603.aspx 희망이 도움이됩니다! :)

관련 문제