6월, 2020의 게시물 표시

블로그 이전

티스토리가 핫하대서 옮김 2020-06-30 https://injel-me.tistory.com/

[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은 추가로 공부해야 한다.