2010-05-08 4 views
1

아래의 코드를 컴파일하려고합니다. 그러나 다음과 같이 실패합니다 :boost :: lambda 바인드 표현식이 문자열의 empty()에 바인드 할 수 없습니다.

오류 C2665 : 'boost :: lambda :: function_adaptor :: apply': 8 개의 오버로드 중 하나도 모든 인수 유형을 변환 할 수 없습니다. bind를 호출 할 때 리턴 타입을 지정하는 것은 도움이되지 않는다.

내가 뭘 잘못하고 있는지 알기!

#include <boost/lambda/lambda.hpp> 
#include <boost/lambda/bind.hpp> 
#include <string> 
#include <map> 

int main() 
{ 

    namespace bl = boost::lambda; 
    typedef std::map<int, std::string> types; 
    types keys_and_values; 
    keys_and_values[ 0 ] = "zero"; 
    keys_and_values[ 1 ] = "one"; 
    keys_and_values[ 2 ] = "Two"; 

    std::for_each(
     keys_and_values.begin(), 
     keys_and_values.end(), 
     std::cout << bl::constant("Value empty?: ") << std::boolalpha << 
         bl::bind(&std::string::empty, 
           bl::bind(&types::value_type::second, _1)) << "\n"); 




    return 0; 
} 

답변

2

사소한 변경은

1 #include <boost/lambda/lambda.hpp> 
2 #include <boost/lambda/bind.hpp> 
3 #include <algorithm> 
4 #include <iostream> 
5 #include <string> 
6 #include <map> 
7 
8 int main() 
9 { 
10 
11  namespace bl = boost::lambda; 
12  typedef std::map<int, std::string> types; 
13  types keys_and_values; 
14  keys_and_values[ 0 ] = "zero"; 
15  keys_and_values[ 1 ] = "one"; 
16  keys_and_values[ 2 ] = "Two"; 
17 
18  std::for_each(
19     keys_and_values.begin(), 
20     keys_and_values.end(), 
21     std::cout << bl::constant("Value empty?: ") << std::boolalpha << 
22     bl::bind(&std::string::empty, 
23       bl::bind(&types::value_type::second, bl::_1)) << "\n"); 
24 
25 
26 
27 
28  return 0; 
29 } 

통지 누락이 포함 (:-)? 더 나은 컴파일러 시간) ++는 g 컴파일하고 감사 아 bl::_1

+0

합니다. Boot/bind.hpp가 내 프로젝트에 포함되었다는 것을 알았습니다. 일단 include를 제거하면 잘 동작합니다. 왜 그것이 더 설명적인 오류를주지 않았는지 모르겠다. – navigator

+0

@navigator 네, 저 자신을 만났습니다. 부스트 바인딩은 람다와 모든 종류의 혼동을 일으키는 익명의 네임 스페이스에 _1을 넣는다 – Anycorn

1
#include <boost/foreach.hpp> 
... 
#define foreach BOOST_FOREACH 
... 
foreach(types::value_type kv, keys_and_values) 
    std::cout << "Value empty?: " << std::boolalpha 
      << kv.second.empty() << "\n"; 
... 
+0

'std :: for_each'를 사기성을 넘어서서 사소한 일을하는 데 매우 탁월한 접근법! 범위 기반 루프도 C++ 0x에 있습니다. – UncleBens

+0

이 예제에서는 for_each를 사용하여 boost :: lambda 바인드 기능을 학습합니다. – navigator

+0

@navigator : 좋습니다. 나는 여전히 boost.lambda가 C++ 0x에 의해 폐기 될 것이라고 생각한다. – UncleBens

관련 문제