binder2nd, bind2nd 및 bind1st 사용 방법은 무엇입니까? 구체적으로 언제 사용해야하며 필요합니까? 또한 몇 가지 예를 찾고 있습니다.바인더 및 bind2nd 펑터 사용 방법?
1
A
답변
5
항상 사용자 정의 펑터 객체를 정의 할 수 있으므로 엄격히 말하면 은이 아닙니다. 하지만 그들은 매우 편리에 정확하게 피하기 위해은 간단한 경우에 사용자 지정 펑터를 정의해야합니다. 예를 들어 std::vector<int>
에있는 항목 수를 > 10
으로 집계하려고한다고 가정합니다. 당신은 ... 물론 코드의 수 :
std::count_if(v.begin(), v.end(), gt10())
정의한 후 :
class gt10: std::unary_function<int, bool>
{
public:
result_type operator()(argument_type i)
{
return (result_type)(i > 10);
}
};
대신, 얼마나 더 편리이 코드에 고려해야 :
std::count_if(v.begin(), v.end(), std::bind1st(std::less<int>(), 10))
어떤 보조 펑없이 클래스를 정의해야합니다! -)
1
바인더는 currying을 수행하는 C++ 방식입니다. 감사합니다. Boost Bind 라이브러리를 확인하십시오.
맞습니까? bool IsOdd (int i) {return ((i % 2) == 1); } int main() { int mycount; 벡터 myvector; for (int i = 1; i <10; i ++) myvector.push_back (i); // myvector : 1 2 3 4 5 6 7 8 9 mycount = (int) count_if (myvector.begin(), myvector.end(), IsOdd); cout << "myvector는"<< mycount << "홀수 값을 포함합니다. \ n"; return 0; } 출처 : http://www.cplusplus.com/reference/algorithm/count_if/ 그들은 단순한 함수 인 임의의 펑터 객체를 정의하지 않습니다. –
Tom
죄송합니다. 코드를 형식화하지 않았지만 코드는 다음과 같습니다. 여기에 : http://www.cplusplus.com/reference/algorithm/count_if/ – Tom
@ 톰, 그렇습니다. 간단히 말해서, 펑터는 함수가 될 수 있지만, 이전에는 (종종 사용 시점과는 거리가 먼) 바인더는 _convenient_합니다. 왜냐하면 그것들을 피할 수 있기 때문입니다 (이미 말했듯이, _convenient _! -). –