DevLog/D2D11 프로젝트

Pain Point C++에서 델리게이트같은 함수 만들기

뽀또치즈맛 2024. 10. 31. 20:52

C++에서 델리게이트처럼 이용하려면?

 
던전 맵에 입장할 때,
카메라와 플레이어가
위에서 아래로 떨어지는 효과를 구현하기 위해,
DungeonLevel 클래스는
던전 레벨로 전환하는 순간을 감지해야 한다.
 
이를 위해 DungeonLevel 클래스의
특정 함수를 외부에서 호출하는 방식으로
전환 시점을 처리할 수 있다.
 
이러한 구현을 위해
UE5에서 사용했던 델리게이트 방식이 떠올랐다.
이를 적용하기 위해
DelegateManager 클래스를 별도로 만들었다.

구현 방식

DungeonLevel의 EntranceDungeon 멤버 함수를
람다 표현식을 사용하여
DelegateManager에 바인딩했다.
 
이렇게 함으로써 델리게이트처럼
다른 클래스에서도
DungeonLevel의 함수를 호출할 수 있는 구조를 만들었다.
 

실질적 결과


결과적으로,
DelegateManager 클래스를 통해 언제든지
바인딩된 DungeonLevel의 함수를 호출할 수 있게 되어,
던전 레벨 전환 시 발생하는
카메라 및 플레이어 효과를 유연하게 처리할 수 있다.

원하는 바 대로 작동하고 코드도 너무 예쁘다.


다음에 구현할 것

  1. 플레이어 클래스 세부 구현
  2. 플레이어 콜라이더와 벽, 바닥 충돌 구현
  3. 맵에 카메라 가두기

 
 
참고 문헌
https://en.cppreference.com/w/cpp/utility/functional/bind

std::bind - cppreference.com

template< class F, class... Args > /* unspecified */ bind( F&& f, Args&&... args ); (1) (since C++11) (constexpr since C++20) template< class R, class F, class... Args > /* unspecified */ bind( F&& f, Args&&... args ); (2) (since C++11) (constexpr since C+

en.cppreference.com

https://en.cppreference.com/w/cpp/utility/functional/function

std::function - cppreference.com

template< class > class function; /* undefined */ (since C++11) template< class R, class... Args > class function ; (since C++11) Class template std::function is a general-purpose polymorphic function wrapper. Instances of std::function can store, copy, an

en.cppreference.com