본문 바로가기

차장님의 이야기

C++에서 Func, Predicate, Action 구현 해보기

현재 진행 상황 요약 : 

윈도우 : 키보드, 마우스 입력 가능.

리눅스, 맥 : 키보드 버퍼를 읽는 방식으로 통해, 키보드만 입력 가능.

 

만든 부분 클래스를 순차적으로 소개할 예정.

 

C# 에 있는 Func, Predicate, Action 기능을 구현한 내용 부터 소개.

 

Func의 기능에서 템플릿으로 구현을 하였음.

C++에서 template<>를 사용하여 개발 할 경우 .cpp 와 .h를 분리해서 만들 수 없으므로 .h에 모든 코드를 기입 하였다.

 

template에서 사용된 인자들은 RETURN, ARGS 이며 처음 알았던 내용은 typename... 을 통하여 가변인자를 지원 한다는 것 이였다.

C++ 11 부터 지원이 된다고 한다.

 

기존에는 일일이 구현을 따로 해주어야 했다고 하는데 그런 수고가 줄어들었다.

 

그 이후로 멤버 변수는 단 1개이다. 

func 라는 이름을 가지는 함수 포인터 이다. 초기 값은 nullptr의 값을 가진다.

 

함수 포인터 이며 RETURN 타입의 반환값을 가지며, ARGS... 은 C++ 에서 템플릿, 가변인자를 사용할 때 저런식으로 사용 한다고 한다.

 

그 이후로는 연산자 오버로딩을 통하여 함수 호출 및 대입연산을 한다.

비교문이 있는 이유는 차후에 EventHandler<> 란 것을 만들게 되는데. 이 때 += 연산, -= 연산을 하는 부분 이 있는데

"-="연산을 하기 위해서 이벤트에서 삭제할 함수를 탐색 하기 위하여 비교문이 존재한다.

 

함수 포인터 이기 때문에 모든 포인터를 처리가 가능한 void* 로 데이터를 받아서 주소가 같은지 다른지 체크하도록 하였다.

 

그 이후에 나오는 Action, Predicate는 Func에서 void 리턴값, bool 리턴값 이다.

원래는

Action 클래스를 만든 뒤 Func<void, ARGS...>를 상속 받을려고 하였으나. 문제가 있어서 잘 되지 않아 다른 방법을 선택하였다.