2010-04-14 3 views
7

는 다음의 두 가지 기능을한다고 가정C++ : 바인드 결합?

#include <iostream> 
#include <cstdlib> // atoi 
#include <cstring> // strcmp 
#include <boost/bind.hpp> 

bool match1(const char* a, const char* b) { 
    return (strcmp(a, b) == 0); 
} 

bool match2(int a, const char* b) { 
    return (atoi(b) == a); 
} 

각 기능은 두 인자를 있지만 (STD/부스트) bind를 사용하여 하나의 인자를 호출 가능한 오브젝트로 변환 될 수있다. 나는 하나 개의 인자를 가지고 boolbool의 & &을 두 개의 인수를 받아 반환하는 호출 개체를 반환하는 이와 같은 두 가지 기능에서 얻을 할 수 있도록하려면

boost::bind(match1, "a test"); 
boost::bind(match2, 42); 

:의 라인을 따라 뭔가 s. 인수의 유형은 임의적입니다.

bool을 반환하는 함수의 경우는 operator&&과 같습니다.

+0

하나의 인수를 사용하고 bool을 반환하는 함수를 원하지 않으십니까? 즉 match1 ("a test", X) && match2 (42, X)'와 같은가? 또는 정말로 match1 ("test", X) && match2 (42, Y)'를 원합니까? –

+0

두 개의 인수를 취하는 함수가 정말 필요합니다. –

답변

9

boost::bind의 반환 유형은 operator && (및 many others)을 오버로드합니다. 당신이이 값을 저장할 boost::function를 사용하는 경우 그래서 당신은

boost::bind(match1, "a test", _1) && boost::bind(match2, 42, _2); 

를 작성할 수 있습니다. 이 경우, 유형이 boost::bind의 리턴 타입 (즉 지정되지 않은)가 아니라 바로 서명 어떤 펑은 boost::function로 변환 것을

boost::function<bool(const char *, const char *)> 

참고가 될 것입니다.

+0

@sth, 편집 됨, 좋은 제안 –

+0

'boost : bind' 유형의 결과를 반환하는 함수를 사용할 수 있습니까? –

+1

@Helltone, 좋은 질문 - 내 편집을 참조하십시오. –