std::fucnction
c의 함수포인터를 대체하는 c++11부터 추가된 기능이다.
용도 : 함수포인터 반환, 함수를 다른 함수에 전달
전역으로 선언된 Func 함수를 std::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이 나오는 걸 확인 할 수 있음
'STUDY > C++' 카테고리의 다른 글
C++ - 가변 인자 템플릿 (Variadic Template) (0) | 2022.03.21 |
---|---|
C++ - 캐스팅(형변환), static_cast, dynamic_cast, const_cast,reinterpret_cast (0) | 2022.03.18 |
C++ - Template 템플릿, 동작과정, typename과 class 선언의 차이 (0) | 2022.03.16 |
숫자0~9까지 아스키코드값은 48~57 영문a~z까지의 아스키코드값은대문자 65~90소문자 97~122 (0) | 2021.11.01 |
C++ - String 라이브러리 [특정 문자 찾기에 없는 문자일 때] (0) | 2021.10.28 |