title: "C++에서의 몇 가지 의문 사항에 대한 정리 (3) RTTI"
description: "C++에서의 몇 가지 의문 사항에 대한 정리 (3) RTTI"
cleanUrl: /sw-engineer/cplusplus-rtti
ogImage: ""
floatFirstTOC: right

MFC를 쓰며 언제나 "저게 뭐야?"하고 지나쳐왔던 RUNTIME_CLASS, DECLARE_DYNAMIC등의 매크로. 어디에, 왜, 언제쓰는지도 모른 채 그냥 지나쳐왔던 그 내용들..이것들이 실행 시 인스턴스의 실제 타입을 알아내는 데 이용하는 MFC의 메카니즘이라는 것을 이제야 알게되었다. 그것도 MFC가 아니라, C++을 다시 보면서.

RTTI(Run-Time Type Identification 혹은 Run-Time Type Information)

은 C++에서 기본적으로 지원한다. 근디, MFC에서는 C++이 지원하는 놈들을 안쓰고 위의 매크로 등을 통해 독자적으로 이 기능을 지원하는데, 왜 그런지는 낭중에 알아보기로 해야겠다. (새로 배우기도 빡신데, 찾기까지는 넘 힘들다.) Visual C++에서는 프로젝트 Setting 항목에서 C++ Language 탭의 "Enable RTTI"를 활성화해야 한다.

dynamic_cast 연산자

// 예: employee가 manager의 기반 클래스일 때(pE는 employee의 포인터, rE는 레퍼런스),
manager* pM = dynamic_cast< manager* >(pE); //포인터 타입의 변환
manager& rM = dynamic_cast< manager& >(rE); //레퍼런스 타입의 변환

typeid 연산자

표현식(expression)으로써 타입이 무엇인지를 알아낼 수 있다. 여기서 표현식은 일반 타입이 될 수 있고, 가상 함수가 담긴 타입도 될 수 있는데, 그 표현식의 결과는 표현식 자체의 타입에 따라 달라지더라...

type_info 클래스

typeid 연산자가 반환하는 타입. 이 타입을 이용해서 타입 비교, 타입 이름 알아내기 등을 해낸다.

참고 자료