[C++11] std::bind, std::placeholder
#std::bind
참고 : http://egloos.zum.com/sweeper/v/3007638
std::bind(함수의주소, 인자1, 인자2, ....);
간단히 말하면 호출이 가능한 객체에 인수를 바인딩 하는 것
ex)
void hello(const string& s)
{
cout << s << endl;
}
int main()
{
....
auto func = std::bind(hello, "hello world");
func();
}
=> hello world
# std:placeholder
인자값을 새로운 함수의 인자로 받을 수 있도록 해준다.
ex1)
int sum(int a, int b, int c)
{
return a+b+c;
}
int main()
{
....
auto func1 = std::bind(sum, std::placeholder::_1, 2, 3);
cout<< func1(1) << endl;
}
=> 6
sum 함수의 두번째, 새번째 인수는 2와 3으로 고정이 되고 첫번째 인수만 변수로 받을 수 있도록 새로운 함수 func1이 정의 되었다고 생각할 수 있음
ex2)
int sum(int a, int b, int c)
{
return a+b*10+c;
}
int main()
{
....
auto func2 = std::bind(sum, std::placeholder::_1, std::placeholder::_2, 3);
cout<< func2(2,3) << endl;
}
=> 35
둘 이상의 placeholder를 사용할 수 있다.
ex3)
int sum(int a, int b, int c)
{
return a+b*10+c*100;
}
int main()
{
....
auto func3 = std::bind(sum, 1, std::placeholder::_2, std::placeholder::_1);
cout<< func3(2,3) << endl;
}
=> 231
func3에서 sum의 첫번째 인자는 이미 1로 고정 나머지 두 인자는 placeholder로 설정 됨
func3의 첫번째 인자는 원래 함수 sum의 세번째 인자가 되고
func3의 두번째 인자는 원래 함수 sum의 두번째 인자가 되고
즉, 고정되지 않은 남은 인자들의 순서를 palceholder로 변경할 수 있음