갓똥
나는야 프로그래머
갓똥
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 프로그래밍 (146)
      • 자바 (9)
      • 안드로이드 (2)
      • 유니티 (20)
      • C++ (38)
      • C# (56)
      • HTML (2)
      • 파이썬 (3)
      • 자료구조 (2)
      • 알고리즘 (0)
      • 문제풀이 (4)
      • 디자인 패턴 (7)
      • 카카오톡 봇 (1)
      • 엑셀 (1)
      • 기타 (1)
    • 게임 (21)
      • 테일즈위버 (0)
      • 카이로소프트 (1)
      • 순위 (19)
      • 기타 (1)
    • 일상 (13)
      • 카페 (1)
      • 방탈출 (12)
    • 기타 (6)
      • 웃긴자료 (5)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • C++ virtual
  • c# delegate
  • c# unboxing
  • c# 코루틴
  • 게임 디자인 패턴
  • 유니티 그래프
  • Unity Graph
  • 알고리즘
  • C++ 상속
  • 게임 매출 순위
  • pc 게임 순위
  • 게임매출순위
  • 자바
  • pc게임 순위
  • C++
  • 롤 골드그래프
  • 글로벌게임매출
  • c# coroutine
  • 강남 방탈출
  • 2020년 게임 매출
  • c# Thread
  • 전세계게임매출순위
  • 모바일 게임 순위
  • C++ 소멸자
  • 유니티 그래프 그리기
  • 전세계 게임 매출
  • C# 예외 처리
  • C# boxing
  • c# collection
  • 유니티 골드그래프

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갓똥

나는야 프로그래머

[C++] RTTI (Run Time Type Information)
프로그래밍/C++

[C++] RTTI (Run Time Type Information)

2019. 12. 2. 01:03
728x90
반응형

1. 핵심 개념

#include <iostream>
#include <typeinfo>

int main() {
    int  n1 = 10;
    auto n2 = n1; // n2의 타입은? int
    
    const std::type_info& t1 = typeid(n2);
    
    std::cout << t1.name() << std::endl;
}

 

코드를 작성하다보면 이 타입이 정말 int일까? 하는 경우가 있다.
이때, 실행시간에 타입의 정보를 알아낼 수 있는 방법이 있다.

  ① RTTI (Run Time Type Information)

    => 실행시간에 타입의 정보를 얻을 때 사용하는 기술

 

2. RTTI 기술을 사용하려면

  ① <typeinfo> 헤더를 포함한다.

 

  ② typeid 연산자를 사용하면

 

  ③ 타입의 정보를 담은 type_info 객체를 얻을 수 있다.

 

  ④ type_info 객체의 멤버 함수 name() 사용

 

실행결과
g++ 컴파일러
i

cl 컴파일러
int
실행결과를 보면 int로 뜨는 것을 볼 수 있다.
g++은 i로 뜨는데 이는 내부적으로 int를 i로 표현하고 있어서 나오는 것인데, 
이 결과를 명확하게 int로 표현하고 싶다면 파일명 | c++filt -t 로 int를 볼 수 있다.

 


3. 자세한 내용

#include <iostream>
#include <typeinfo>

int main() {
    auto n1 = 10;
    
    typeid(n1);
    typeid(int);
    typeid(3 + 4.2);
    
    const std::type_info& t = typeid(1);
    std::cout << t.name() << std::endl;
}

  ① typeid

    => 타입에 대한 정보를 얻을 때 사용하는 연산자

    => 다양한 형태로 사용할 수 있다.

    => typeid 연산자의 결과로 const std::type_info&가 반환된다.

 

  ② std::type_info

    => 타입의 정보를 담고 있는 클래스

    => 사용자가 직접 객체를 만들 수는 없고, typeid() 연산자를 통해서만 얻을 수 있다.

    => 멤버 함수인 name을 통해서 타입의 이름을 얻을 수 있다.

 


4. 타입 조사, 비교

#include <iostream>
#include <typeinfo>

int main() {
    auto n1 = 10;
    
    const std::type_info& t1 = typeid(n1);
    const std::type_info& t2 = typeid(int);
    
    if ( t1 == t2 ) {
        std::cout << "equal" << std::endl;
    }
    
    if ( typeid(n1) == typeid(int) ) {
        std::cout << "equal" << std::endl;
    }
    
    std::cout << t.name() << std::endl;
}

  ① 타입을 출력하는 것이 아닌 조사하고 싶다면

    => 2개의 type_info 객체를 == 연산자로 비교한다.

    => typeid의 결과를 바로 비교해도 된다.

 

  ② 변수 n이 int타입인지 조사하는 일반적인 코드

728x90
반응형

'프로그래밍 > C++' 카테고리의 다른 글

[C++] 연산자 재정의 (operator overloading)  (0) 2019.12.14
[C++] 다중 상속 (multiple inheritance)  (0) 2019.12.03
[C++] 인터페이스 (interface)  (0) 2019.12.01
[C++] 추상 클래스 (abstract class)  (0) 2019.11.30
[C++] 가상 소멸자  (0) 2019.11.30
    '프로그래밍/C++' 카테고리의 다른 글
    • [C++] 연산자 재정의 (operator overloading)
    • [C++] 다중 상속 (multiple inheritance)
    • [C++] 인터페이스 (interface)
    • [C++] 추상 클래스 (abstract class)
    갓똥
    갓똥
    공부하며 알아가는 내용을 정리해 봅니다.

    티스토리툴바