해결된 질문
작성
·
285
0
액터 우선순위 정렬과정에서 Sort의 매개변수로 FCompoareFActorPriority
를 생성해서 넘겨주고 있고, 이 구조체가 operator()를 구현해서 소팅을 진행하는 것 같은데요.
기능적으로 그냥 전역함수를 선언하거나, 아니면 static 함수를 선언하고 함수 포인터를 넘겨주는 것과 차이가 없는 것 같은데 혹시 언리얼 엔진에서 굳이 이렇게 하는 이유가 있을까요? 사소한 거긴 한데, 이런 패턴이 꽤나 자주 보여서 여쭤봅니다..!
답변 1
0
아 이것을 C++에서는 functor라고 보통 표현하는데 몇 가지 장점이 있습니다.
오브젝트라서 상태관리가 가능하고 확장이 용이하다
안정적이고 빠르다. 컴파일러가 해석하기 명확하고 편하다.
언리얼 엔진 소스코드를 보면 새로운 문법에 꽤나 보수적입니다. 지금 C++은 많이 안정화됐지만 예전에는 새로운 구문이 항상 잘동작했던 건 아니거든요. 게임 특성상 오래되고 다양한 플랫폼 지원도 필요하지요.
앗 아뇨! 엔진에서는 아래 코드블럭처럼 정렬기준을 서술한 구조체를 선언하고, 사용하더라고요
그런데 모던 c++에서는 predicate를 매개변수로 받는다면 보통 람다나 정적 함수, 전역 함수 같은 것들을 넘겨서 정렬하는 경우가 많다보니까 언리얼 엔진이 이렇게 구현한 이유가 따로 있는 걸까? 싶어서 여쭤봤습니다!