[C++] Functor (또는 함수 객체) 연습

c++ 보는 책에서 펑터 개념을 알려줬는데 처음에 이해가 안 가서 안 보고 있었다가
오늘 다시 보고 이해하면서 책의 예제와 비슷한 코드를 짜 보았다.



클래스 구조는 이렇다. 순수 가상 함수를 담고 있는 추상 클래스인 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은 추가로 공부해야 한다.

댓글

이 블로그의 인기 게시물

scanf와 scanf_s

리버싱 연습
abex crackme2 - 1

리버싱 연습
abex crackme 2 - 2