01
21

std::fucnction

c의 함수포인터를 대체하는 c++11부터 추가된 기능이다.

용도 : 함수포인터 반환, 함수를 다른 함수에 전달

 

전역 함수를 function로 받아옴

 

전역으로 선언된 Func 함수를 std::function 기능으로 받아온 것이다. 

전역함수가 아니라 클래스의 멤버함수의 경우에는

 

클래스의 맴버함수를 function로 받아옴

 

클래스 객체를 하나 만들어서 함수의 주소를 전달해서 사용해야한다.

또한 그렇게 만든 함수를 사용할때도 객체를 전달해야한다. 


std::bind

Functional과 마찬가지로 c++11부터 표준이다.

용도 : 함수의 일부 매개변수를 고정 값으로 정해, 사용할 수 있게 한다. 

 

 

위 코드는 bind로 1, 2.0f, false로 함수의 매개변수를 고정시킨 것이다.

FuncA(5,6,false) 로 넣든간에 120의 결과로 나오는 걸 볼 수 있다.  

bind시 인자를 변수로 변경하고 싶으면 std::placeholders를 사용해야한다. 

 

 

 function을 사용하지않고 간편하게 auto로 bind를 할 수 있다.  

 

  1) function Class를 사용

    std::function<함수의 형태> 변수명  = bind(함수명, 인자1, 인자 2,...);


  2) auto 키워드 사용

    auto 변수명  = bind(함수명, 인자 1, 인자 2,...);

auto가 편하니 auto를 쓰자


std::placeholders

bind시 인자를 변수로 변경하고 싶으면 std::placeholders를 사용해야한다. 

 

 

std::placeholders::_1 의 숫자는 인자의 순서를 뜻한다.

고로 첫번째인자에는 _1이 들어가고, 두번째인자에는 _2가 들어간다.

bind 마지막 인자에 _1를 넣었는데, 이렇게 되면 첫번째 인자가 불값으로 들어간다.

결과 121이 나오는 걸 확인 할 수 있음

 

 

COMMENT