RTTI에 대한 이해
이번에는 C++의 RTTI ( R un t ime T ype I ndentification) 에 대해 소개하고자 합니다. 다형성(Polymorphism) 을 갖는 C++ class 들(하나 이상의 가상함수를 포함)에 대해 적용 가능합니다. 클래스 다형성은 가상함수에 의해 구현되므로, RTTI는 가상함수를 갖는 클래스의 상속관계에서만 사용가능 합니다. 아마도 이 주제를 찾아 보는 사용자라면 알고 있겠지만, C++ 포인터와 클래스 상속에 대한 이해가 요구됩니다. RTTI 런타임에 상속 관계를 갖는 클래스들의 객체 타입을 체크 하는 메커니즘. dynamic_cast or typeid 연산자로 구성. 가상함수(Virtual Fucntion)를 가지는 클래스들만 사용 가능. 왜 RTTI 가 필요한지 코드를 통해 살펴보겠습니다. 안전하지 않은 타입 캐스팅 #include <iostream> using namespace std; class CWnd { virtual void draw() { cout << "CWnd" << endl; } }; class CView:public CWnd { public: int m_view; void draw() { cout << "View" << endl; } }; class CTreeView :public CView { public: int m_treeview; void draw() { cout << "Tree View" << endl; } }; int main() { // 부모클래스 포인터는 자식 클래스 객체를 가르킬 수 있다. CWnd *pw = new CWnd; CWnd *pv = new CView; CWnd *pt = new CTreeView;