title: "C++에서의 몇 가지 의문 사항에 대한 정리 (3) RTTI"
description: "C++에서의 몇 가지 의문 사항에 대한 정리 (3) RTTI"
cleanUrl: /sw-engineer/cplusplus-rtti
ogImage: ""
floatFirstTOC: right
MFC를 쓰며 언제나 "저게 뭐야?"하고 지나쳐왔던 RUNTIME_CLASS
, DECLARE_DYNAMIC
등의 매크로. 어디에, 왜, 언제쓰는지도 모른 채 그냥 지나쳐왔던 그 내용들..이것들이 실행 시 인스턴스의 실제 타입을 알아내는 데 이용하는 MFC의 메카니즘이라는 것을 이제야 알게되었다. 그것도 MFC가 아니라, C++을 다시 보면서.
은 C++에서 기본적으로 지원한다. 근디, MFC에서는 C++이 지원하는 놈들을 안쓰고 위의 매크로 등을 통해 독자적으로 이 기능을 지원하는데, 왜 그런지는 낭중에 알아보기로 해야겠다. (새로 배우기도 빡신데, 찾기까지는 넘 힘들다.) Visual C++에서는 프로젝트 Setting 항목에서 C++ Language 탭의 "Enable RTTI"를 활성화해야 한다.
std:bad_cast
를 참조하려면, <typeinfo>
헤더를 포함해야 한다.)// 예: employee가 manager의 기반 클래스일 때(pE는 employee의 포인터, rE는 레퍼런스),
manager* pM = dynamic_cast< manager* >(pE); //포인터 타입의 변환
manager& rM = dynamic_cast< manager& >(rE); //레퍼런스 타입의 변환
표현식(expression)으로써 타입이 무엇인지를 알아낼 수 있다. 여기서 표현식은 일반 타입이 될 수 있고, 가상 함수가 담긴 타입도 될 수 있는데, 그 표현식의 결과는 표현식 자체의 타입에 따라 달라지더라...
<typeinfo>
헤더를 포함해야 한다.type_info
클래스 타입이더라..type_info
클래스의 name()
함수(표현식의 타입 이름을 반환)와 ==
연산자를 많이 이용하더라..typeid
연산자가 반환하는 타입. 이 타입을 이용해서 타입 비교, 타입 이름 알아내기 등을 해낸다.
<typeinfo>
헤더를 포함해야 한다.private
멤버이기 때문에, 사용자가 자신의 프로그램에서 따로 정의해서 사용할 수 없다. 오직 typeid
연산자를 통해서만 생성된다.