2011-03-24 8 views
1

누군가이 코드를 설명해 주시겠습니까?데이터 멤버 콜백 동작에 대한 부스트 바인딩

struct Class { 
    boost::function<void()> member; 
}; 
Class c; 

boost::function<boost::function<void()>()> foo = boost::bind(&Class::member, &c); 
boost::function<void()> bar = boost::bind(&Class::member, &c); 

bar 컴파일의 정의는 그것의 결과 무엇을하고 있습니까?

편집 : foo()은 예상대로 작동하지만 c.member()을 호출하지만 bar()은 호출하지 않습니다.

클래스가 같았다 경우 바인딩해야
+0

와우. 그게 효과가 있니? 무슨 컴파일러? 나는'bar'만이 효과가 있다고 생각합니다. – ltjax

+0

gcc 버전 4.4.5, libboost 1.42 –

+0

반환 유형을 항상 무시할 수 있기 때문에 첫 번째 값이 정확하다고 가정하면 두 번째 값은 쉽습니다. – ltjax

답변

0

첫 번째 호출은 추출기 펑터를 "생성"하는 데 사용됩니다. 그 functor는 호출 될 때, 바인딩 된 멤버를 반환 할 것입니다.

두 번째 호출은 전달 된 펑터의 반환 유형을 숨 깁니다 (첫 번째 예와 동일). 따라서 기본적으로 bar으로 전화하면 아무 것도하지 않습니다.

0

:

Class c;

boost::function<void()> the_function_i_want_to_call = boost::bind(&Class::member, c);

the_function_i_want_to_call.call();

:

class Class { public: void member(); };

그런 다음 싶은 것은 즉

관련 문제