본문 바로가기

개발 관련 기타/C++

C++) std::bind 와 std::placeholders (std::placeholders::_1, std::placeholders::_2, ...)

std::bind

  • std::bind를 알려면 std::function을 알아야 해요

 

std::function

  • C+11에서 나온 함수 포인터로 사용 할 수 있는 std::function
  • std::function<return type(parameters)> name = &함수 이런 식으로 선언을 해요
    • 예) std::function<bool(int, int)> myFunc = &calculate;
    • 이때 calculate는 이미 bool calculate(int, int) 라는 형식을 갖고 선언이 되있어요.

그러면 다시 std::bind를 볼께요

 

 

std::bind

  • std::bind는 반환값이 std::function 인데요 특정 인자를 갖거나 특정 객체의 함수를 부르도록 구체적인 std::function을 제공해요
  • 위의 예) std::function<bool(int, int)> myFunc = &calculate; 이렇게 하면 나중에 부를 때 myFunc(1,2) 이런 식으로 사용 하는데요.
  • myFunc = std::bind(&calculate, 1, std::placeholders_2) 하면 첫번째 인자로 1을 고정하고 두번째 인자는 유동적으로 사용. 예) myFunc(2) <= 첫번째 인자로 1은 이미 들어가 있음.

 

std::placeholders

  • 위의 사용 예 에서 보신 것처럼 std::placeholders란 std::bind와 같이 쓰여요.
    • 몇번째 자리 인자는 고정으로 두지 않고 동적으로 받아서 사용하겠다 한다면 인자 자리에 std::placeholders_::N 이라고 써줘요.
      • 여기서 N은 몇 번째 인자로 사용할건지를 나타내는 수입니다. 그래서 위에서는 두번째 인자로 사용할 것이니 std::placeholders::_2가 사용되었습니다.