C++
[C++] Delegate & Function Pointer
Delegate - 게임 엔진 컴포넌트와 랜더러 엔진을 구성하는 도중 객체의 멤버함수나 전역 함수를 같은 형식의 함수를 묶어 특정 이벤트에서 한번에 호출해주는 방식을 도입하면 편리할 것 같아 도입하게 되었다. - 유니티와 같은 경우에는 Delegate 타입으로 함수포인터 변수를 선언하여 해당 타입을 통해 이벤트를 등록해두어 사용할 수 있게 되어있다. - 언리얼 같은 경우엔 Delegate 타입을 Delegate 전용 define을 통해 미리 선언해 두어야 하는데 해당 define은 함수의 종류에 따라 각각 호출하는 함수(Bind, BindStatic, BindRaw, BindSP, BindUObject ...)가 다르다. - 일단 현재 프로젝트에서 간단히 같은 형식의 함수를 묶어 호출해주는 방식과, 해당..
[C++] Return Type Operator
Return Type Operator 엔진 구조를 짜다보면 Collider나 Shader 같은 경우 Base Class를 통해 자식 Class를 만드는 경우가 많은데 해당 Resource를 관리할땐 BaseClass List로 관리를 하는 경우가 대부분이다. 이런 자식 Class가 생길때마다 Get하는 함수를 각각 만들어줄 때마다 깔끔하게 하나의 함수로 내보내고 싶다는 생각을 계속하게 되었는데 처음엔 std::valiant와 std::vist을 이용하려 했으나 직관적이지 못해 사용하지 않았다. 그러다 발견한 방법이 Type Operator인데 생각보다 복잡하지 않고 예외처리도 해당 Type들에 대한 정보만 있다면 쉽게 처리할 수 있었다. Operator 방식 - 반환 하고 싶은 Type의 Operator..
[C++] Define Macro
Define Macro Function VS Macro - 단순 반복 작업일 경우 Macro는 치환 방식이므로 Macro를 통해 연산하는 방식이 빠르다. Macro 함수의 장점 - Macro 함수는 단순 치환만을 해주므로, 인수의 타입을 신경쓰지 않고 처리한다. - 여러 개의 명령문을 동시에 포함할 수 있다.- 함수 호출 비용이 줄어드므로 속도 향상에 도움이된다. Macro 함수의 단점 - 디버깅의 어려움.. 정말 까다롭긴하다.. - Macro 함수가 길어지면 길어질수록 괄호를 쓰게 되어 가독성이 매우 떨어지게된다. Macro 함수 사용시 주의점 - token 단위의 연산에서 사용되는 연산자로는 #과 ##이 있다. -> # : Macro를 통해 들어온 token을 문자열로 변환시켜준다. -> ## : M..
[C++] std::enable_if / std::is_base_of
std::enable_if - 스코프 지정 연산(::)에서 지정된 스코프 내에 존재하지 않는 타입을 사용한 경우를 활용하여 enable_if::type은 존재하지만 enable_if::type은 존재하지 않으므로 이를 바탕으로 특정한 경우에만 함수 템플릿을 사용할 수 있도록 만드는 것이다. // STRUCT TEMPLATE enable_if template struct enable_if {}; // no member "type" when !_Test template struct enable_if { // type is _Ty for _Test using type = _Ty; }; std::is_base_of - is_base_of 는 Template 첫번째 인자가 두번째 인자의 자식 객체이거나 동일한 객..