for_each(containerIteratorStart, containerIteratorEnd, funcName);
for_each(containerIteratorStart, containerIteratorEnd, mem_fun(&ClassName::funcName));
for_each(containerIteratorStart, containerIteratorEnd, mem_fun_ref(&ClassName::funcName));
첫번째 매개변수를 고정, 두번째 매개변수 변경
첫번째 매개변수 변경, 두번째 매개변수 고정
void func(int a, int b)
{
a < b;
}
==>>
void func(int a)
{
a < 500;
}
mem_fun은 this객체를 추가해줌
bind함수를 이용해 멤버함수에 고정적인 값을 매개변수로 넘길 수 있음
class Person {
private:
std::string name;
public:
void Show(int iData) const {
std::cout << name << "[" << iData << "]"<<std::endl;
}
};
void foo(const std::vector<Person>& coll)
{
// 일반 템플릿 객체의 멤버함수 호출(인자값 없는)
for_each(coll.begin(), coll.end(),mem_fun_ref(&Person::print));
// 일반 템플릿 객체의 멤버함수 호출(인자값 있는)
for_each(coll.begin(), coll.end(), bind2nd(mem_fun_ref(&Person::printWithPrefix), "person: "));
}
int main()
{
std::vector<Person> coll(5);
// 전역함수 호출
for_each(coll.begin(), coll.end(), GlobalFun);
for_each(coll.begin(), coll.end(), std::bind2nd(std::mem_fun_ref(&Person::Show), 1));
foo(coll);
return 0;
}