c++ 보는 책에서 펑터 개념을 알려줬는데 처음에 이해가 안 가서 안 보고 있었다가
RetRule.h / RetRule.cpp
Rules.h / Rules.cpp
functions.h / functions.cpp
실행 결과
max함수의 세 번째 인자로 펑터를 사용하여 배열에서의 가장 큰 값을 가져올지
오늘 다시 보고 이해하면서 책의 예제와 비슷한 코드를 짜 보았다.
클래스 구조는 이렇다. 순수 가상 함수를 담고 있는 추상 클래스인 RetRule 클래스를
ToValue 클래스와 ToIndex 클래스가 상속받고 있다.
파일 구조는 다음과 같다.
main.cpp
RetRule.cpp
Rules.cpp
functions.cpp
header/
RetRule.h
Rules.h
functions.h
main.cpp
RetRule.h / RetRule.cpp
Rules.h / Rules.cpp
functions.h / functions.cpp
실행 결과
max함수의 세 번째 인자로 펑터를 사용하여 배열에서의 가장 큰 값을 가져올지
배열에서의 가장 큰 값의 인덱스 값을 가져올 지 선택이 가능하다.
추가로, 펑터를 함수 인자로 할 때 함수의 매개변수 기본값 설정을 하여 사용할 수 있었다.
헤더 파일에만 기본값을 지정해 주면 사용이 가능하여, 필요에 따라
max(arr, size);
max(arr, size, ToIndex());
의 두 가지 형태로 사용이 가능하다.
펑터를 어떻게 이용할 지에 관하여는 많이 사용하거나 응용하여 생각 해 봐야 할 것 같다.
C++의 기본 STL에서 지원하는 std::function을 이용하여 그냥 함수 / 람다식 / 펑터를 모조리 담을 수 있는 인자로 사용이 가능할 것 같다.
람다와 std::function은 추가로 공부해야 한다.
'개발, 연습' 카테고리의 다른 글
vscode extension installation from VSIX (0) | 2020.12.20 |
---|---|
[C++] 예외 처리 (0) | 2020.07.11 |
[개발] Sublime Text 3 플러그인 개발 (0) | 2020.07.01 |
[c++] 열혈강의 c++ 문제 08-1 oop 프로젝트 6 (0) | 2020.07.01 |
[c++] 열혈강의 c++ 문제 08-1 (0) | 2020.07.01 |