320x100
RunTime Type Infomation
런타임에 타입 정보를 알 수 있다는 의미다.
즉, 실행 중에 클래스 포인터의 실제 타입을 확인할 수 있다.
C++는 C++98부터 RTTI를 지원해왔다.
typeid 연산자를 이용해 vftbl에 있는 정보로 타입을 확인한다.
vftbl의 정보를 확인하므로 두 클래스가 상속 관계라도 virtual 함수가 포함되어야 한다.
dynamic_cast
dynamic_cast는 RTTI를 이용해 현재 객체의 정보를 검사할 수 있다.
dynamic_cast를 통해 형 변환을 수행하고, Parent의 포인터가 실제로 가리키는 객체의 타입과 동일하다면 유효한 포인터를 반환하고, 아니라면 nullptr을 반환한다.
다만 속도가 느리기 때문에 잘 사용하지 않는다.
커스텀 cast
CRTTI를 각 클래스의 정적 변수로 선언해주고, 상위 클래스가 있는 경우 CRTTI의 m_pBaseRTTI 멤버 변수에 상위 클래스의 CRTTI 정적 멤버 변수를 저장하고, 각 클래스의 CRTTI 정적 멤버 변수를 비교함으로써 클래스의 형식 정보를 알아낼 수 있다.
기존 dynamic_cast에 비해서 빨라졌다 하나 아직은 개선의 여지가 있습니다. 상위 클래스와 비교 시 상속 깊이만큼 루프를 돈다는 점이나 메모리 비 친화적이라는 점, 매크로를 많이 쓴다는 등이 있겠네요. 이런 점등은 좀 더 고민해봐서 개선을 해봐야 할 것입니다.
출처: https://gamedevforever.com/19?category=387043
320x100
'프로그래밍 > C,C++' 카테고리의 다른 글
[C++] 동적 배열을 이용한 stack (0) | 2021.06.30 |
---|---|
[C++] Object pool (0) | 2021.06.29 |
비동기 함수 정리 (0) | 2021.03.22 |
가상 메모리 및 Large Address Aware (0) | 2020.02.19 |
C++ 연산자 오버로딩 (0) | 2018.04.25 |