c, c++ 리마인드

[c++] typeid, is_base_of

무한 나무 2024. 2. 10. 14:55

typeid

typeid 연산자를 사용하면 런타임에 개체의 형식을 확인할 수 있습니다.
런타임 구문이므로 값의 런타임 형식에 대한 정보를 제공합니다.


결과는 [typeid .]입니다 const type_info&. 값은 사용되는 형식에 type_info 따라 형식 ID 또는 식의 형식을 나타내는 개체에 대한 참조 typeid 입니다. 자세한 내용은 type_info 클래스를 참조 하세요.

#include <typeinfo>

  • name()은 해당변수의 자료형을 문자열로 출력하는데, 클래스는 앞에 "class"가 붙는다.
  • raw_name()은 사람이 알아볼수 없으나 빠름. 메모리 절약, 비교 연산에 유리.

is_base_of

해당 클래스가 다른 클래스의 Base 클래스인지?

#include <type_traits>
 
class A {};
class B : A {};
class C : B {};
class D {};
union E {};
using I = int;
 
static_assert
(
    std::is_base_of_v<A, A> == true &&
    std::is_base_of_v<A, B> == true &&
    std::is_base_of_v<A, C> == true &&
    std::is_base_of_v<A, D> != true &&
    std::is_base_of_v<B, A> != true &&
    std::is_base_of_v<E, E> != true &&
    std::is_base_of_v<I, I> != true
);