RTTI(Run Time Type Information) JAVA나 C# 에서는 Reflection이라 불립니다.
프로그램 실행 중 타입의 정보를 얻어 올때 사용하는 방법입니다.
typeid
(간단예시)
int n = 10;
const std::type_info& t = typeid(n);
std::cout << t.name();
요론식으로 사용합니다.
RTTI 를 사용하면 클래스 간의 데이터 타입도 체크 할 수 있게 됩니다.
#include <iostream>
using namespace std;
class Animal {
public:
virtual void cry() { cout << "Crrr" << endl; }
};
class Dog : public Animal {
public:
virtual void cry() { cout << "Mung" << endl; }
};
void foo(Animal* p) {
if(typeid(*p) == typeid(Dog)){
Dog *pDog = static_cast<Dog*>(p); // Static Casting
pDog-> cry();
}
else{
p->cry();
}
}
int main()
{
Animal a;
Dog d;
foo(&a); // Crrr
foo(&d); // Mung
}
if(typeid(*p) == typeid(Dog))
상속되는 클래스의 아이디가 맞는지 확인하여 Dog->cry를 실행할 수 있게 합니다.
마찬가지로 이 RTTI 기술을 써서 쉽게 캐스팅 할 수 있도록 한게 dynamic_cast입니다
2022.04.01 - [C++/언어 공부] - [C++] 형 변환, 타입 캐스팅 (Type casting)