아래의 코드를 컴파일하려고합니다. 그러나 다음과 같이 실패합니다 :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;
}
합니다. Boot/bind.hpp가 내 프로젝트에 포함되었다는 것을 알았습니다. 일단 include를 제거하면 잘 동작합니다. 왜 그것이 더 설명적인 오류를주지 않았는지 모르겠다. – navigator
@navigator 네, 저 자신을 만났습니다. 부스트 바인딩은 람다와 모든 종류의 혼동을 일으키는 익명의 네임 스페이스에 _1을 넣는다 – Anycorn