2011-02-08 3 views
4

몇 가지 관련 질문을 보았지만 여전히 의문입니다. 이 구문 문제의 새로운 기능 :부스트 기능 및 람다 향상

을 : 나는 부스트 1.35 및 1.38 GCC 4.3.4에 (이 내가 주위에 거짓말을 한이 개 설치된다), 그리고 둘 다 오류의 변화를주고 그것을 시도했습니다

boost::function<int (int)> g = f; 
boost::function<int (int)> g2 = 2*g(boost::lambda::_1); 

no match for call to '(boost::function<int()(int)>) (const boost::lambda::lambda_functor<boost::lambda::placeholder<1> >&)' 

답변

8

자리 표시자를 사용하여 함수를 직접 호출 할 수 없습니다. use bind입니다.

boost::function<int (int)> g2 = 2 * boost::lambda::bind(g, boost::lambda::_1); 

(Example)

2

나는 오래된의 당신이 Boost.Lambda을 포기 좋습니다. C++ 0x를 지원하는 컴파일러는 원시 람다를 제공하며 이해하기 쉽습니다. 4.4 이상 버전의 GCC를 사용할 수 있으며 Visual Studio 2010은 C++ 0x도 지원합니다.