2011-11-17 4 views
2

정보

의 구성원이 아닌 :부스트 VS2010에서 : 기능 : 오류 C2039 : '기능':이 방법처럼, 매개 변수로 콜백을 전달하는 부스트 :: 기능을 사용하고 싶습니다 '부스트'

void ReadPacket(
     boost::function<void (const boost::system::error_code&, Packet* p)> callback); 

하고이를 사용

ReadPacket(boost::bind(
    &ServerSession::storePacket, 
    this, 
    _1, 
    _2 
    )); 

를 콜백 체인 제가

callback(ec, packet); 
,745 호출되면 결국

문제

난 그냥 디버그에 솔루션을 컴파일 한 모든 것을 내가

BasicSession.h(30): error C2039: 'function' : is not a member of 'boost' 
BasicSession.h(30): error C2061: syntax error : identifier 'function' 
BasicSession.h(30): error C2059: syntax error : ')' 
BasicSession.h(30): error C2143: syntax error : missing ')' before ';' 

위에서 언급 한 오류를 많이 가지고

하지만 에서

출시 OK ... 보인다 나는 혼란스럽고 실망 스럽다.

제안

나는 boost::function에서 다른 구문 거기 것으로 나타났습니다. 예 : boost::function0 또는 boost::function1. 이것은 VS2010이 무언가를 지원하지 않기 때문에 만들어진 것입니다 (정확히 무엇인지 모르겠습니다)

맞습니까?

또한이 응용 프로그램을 가능한 이식성과 크로스 플랫폼으로 만들어야합니다.

부스트 1.47 및 VS2010

+0

MSVC10은 * 가변 템플릿 *을 지원하지 않습니다. variadic 동작 (예 : bind)을 가짜로 만드는 것은 후드 아래에서 더러운 속임수를 사용해야합니다. –

+0

@kerrekSB 그래서 ... 콜백 함수를 매개 변수로 전달하는 메서드를 사용하려면 어떻게해야합니까? ASIO에서했던 것처럼. – nix

+1

좋은 생각이 아닙니다. 죄송합니다 :-) MSVC 관련 문제인 것 같습니다. 나는 그 컴파일러에 대한 경험이있는 누군가가 곧 유용한 것을 올릴 것이라고 확신한다! –

답변

3

입니다. 튜토리얼을 보면 '선호'와 '이식 가능'구문이 모두 나열됩니다. 코드를 이식 할 수 있기를 원하기 때문에 후자를 선택할 수 있습니다.

+0

thx. 나는 이미 그것을 발견했다. 그리고 이것이 답입니까? 그냥 function1을 사용하고 있습니까? – nix

+0

그러나이 자습서에서는 Visual C++ 7.1 이상이 "기본 설정"구문을 지원한다고 말합니다. – ruakh

+0

@ruakh 귀하와 동의하십시오. 또한 이상한 코드는 Degug에서 컴파일되지만 Release에서는 컴파일되지 않습니다. – nix

2

당신이 그것을 놓친 부스트 기능에 tutorial 인 경우 솔루션이 경우 boost::function4

+1

에 오신 것을 환영합니다 :) 일반적으로 우리는 해결책을 제공 할뿐만 아니라 문제가 무엇인지에 대한 해답을 기대합니다. 이것은 긴 응답을 의미 할 수 있습니다 ...하지만 그것은 사람들이 다음에 그럴 필요가 없을만큼 자신을 교육 할 수 있도록 허용합니다. –

+0

좋아요, 최선을 다하겠습니다. :) –

+0

@RomanKr이 ​​짧은 대답을 좋아하지만, 1. 왜 VS2010에서 디버그로 컴파일되고 릴리스되지 않습니다. 그리고 말했다 : 튜토리얼은 Visual C++ 7.1 이상이 "기본"구문을 지원한다고 말합니다. 무슨 요점 ??? – nix