새소식

💻 Programming (프로그래밍)/C++

[C++] RTTI(Run Time Type Information) 이란?

  • -

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)

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.