:
using namespace std;
int getInt() {
cout << "getInt!" << endl;
return 42;
}
function<int(void)> foo = &getInt;
int magicNumber = 13;
cout << "before delayed definition" << endl;
function<int(void)> delayed = std::bind(plus<int>(), magicNumber, bind(foo));
cout << "after delayed definition" << endl;
int i = delayed();
cout << "after delayed call" << endl;
출력 :
지연 정의하기 전에 지연 정의
의 getInt 후
! 지연 호출
후
당신은 당신이 그랬던 것처럼 하나, foo
를 정의 할 필요가 없습니다. , 표준 : : 바인딩에 대한 자세한 내용은
function<int(void)> delayed = bind(plus<int>(), magicNumber, bind(getInt));
, N3797 단락 20.9.9을 확인하십시오 당신은 delayed
의 정의에 직접 getInt
을 바인딩 할 수 있습니다. 좀 더 구체적인 설명은
은 cppreference 말한다 :
표준 : 바인드 반환 형식
...
멤버 함수 연산자() 바인딩 이전 호출에서 얻은 객체 g을 감안할 때, 함수 호출 식 g (u1, u2, ... uM)에서 호출 될 때 std :: decay :: type 유형의 저장 객체 호출은 다음과 같이 정의 된 인수를 사용하여 수행됩니다.
...
- std :: is_bind_expression :: value == true 인 경우 (즉, 다른 바인드 subexpression이 bind에 대한 초기 호출에서 인수로 사용 된 경우) 바인드 하위 표현식이 즉시 호출되고 해당 결과가 호출 가능한 객체로 전달됩니다. 바인드 서브 표현식에 자리 표시 자 인수가 있으면, u1, u2, ....에서 선택됩니다.
...
Gadzooks! 방금 무슨 일이 있었 니? 바인드가 플러스로 되돌아 오는 유형은 무엇입니까? 나는 bind가 함수 객체를 반환했다고 생각했다. –
몇 가지 있습니다, 당신은 단지 알고 싶지 않다;) –
더 심각하게, http://stackoverflow.com/questions/6412065/what-is-the-return-type-of-boostbind이 질문을 만지지 만, 많은 세부 정보를 제공하지 않습니다. –