: 나는 위의 문을 분해부스트 :: 더 큰 표준 : 및 표준 : less_equal와 바인드 작업을 수행하는 방법
(i > 5) && (i <=10)
std::vector<int> ints;
..
int count=std::count_if(
ints.begin(),
ints.end(),
boost::bind(// # bind 1
std::logical_and<bool>(),
boost::bind(std::greater<int>(),_1,5), // # bind 2
boost::bind(std::less_equal<int>(),_1,10))); // # bind 3
template <class T> struct greater : binary_function <T,T,bool> {
bool operator() (const T& x, const T& y) const
{return x>y;}
};
을 다음과 같이
boost::bind(std::greater<int>(),_1,5)
가 i > 5
boost::bind(std::less_equal<int>(),_1,10)
사용된다 i <=10
사용된다.
boost::bind(std::greater<int>(),_2,5)
이 i <=10
에 사용되는 i > 5
boost::bind(std::less_equal<int>(),_2,10)
에 사용됩니다 :
내가 가진 문제는 그 코드를 작성하는 경우 때문에 위의 코드를 이해하고 난 다음를 작성하는 방법입니다.
함수 std::greater
에는 두 개의 매개 변수 (예 : x
및 y
)가 필요하며 x > y
인지 확인해야합니다. 그래서 y
을 5
으로 묶어서 Xs
을 찾을 수 있다고 생각했습니다. 물론, 제 생각은 잘못되었습니다.
나를 설명 할 수 있습니까? 는 (가장 안쪽) bind
호출이 반환이 아닌 전체 표현이 구축 될 수있는 펑의 매개 변수를 특정 지정 당신에게 등
** # bind 1 **은 ** # bind 2 **와 ** # bind 2 **에'_1'을 제공하여 bool을'std :: logical_and'에 반환합니다. 차례로,'_1'과'5'는 첫 번째와 두 번째 매개 변수로'std :: greater()'펑터에 주어집니다. –
q0987
그래서'_1'은 ** # bind 1 **가받는 첫 번째 매개 변수이고, ** funder에 대한 첫 번째 매개 변수 인 ** #**으로 ** # bind 2 **로 전달됩니다. – q0987
@ q0987 : 죄송합니다. 이전 의견이 오도 된 것 같습니다. 중첩 된 바인드 호출은 내부에서 외부로 해결됩니다. 따라서 'x'가 호출되면 'bind (and, greater (x, 5), less_equal (x, 5) 10))', ... 등 –