C, C++, C#/C++ 공부

[C++11] std::bind, std::placeholder

밥보92 2018. 5. 31. 16:23
반응형

#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로 변경할 수 있음

 

 

 

반응형