C_C++

C++, typeid() 클래스 이름 알아내기

고니자니 2024. 11. 12. 17:43
반응형

C++에서는 객체의 실제 클래스 이름을 알아내기 위해 typeid 연산자와 type_info 클래스를 활용할 수 있습니다. 이 기능을 사용하려면 객체가 다형적(polymorphic)이어야 하므로, 즉 클래스에 가상 함수가 정의되어 있어야 합니다.

아래는 typeid를 이용해서 객체의 클래스 이름을 알아내는 예제입니다.

 

#include <iostream>
#include <typeinfo>

class Base {
public:
    virtual ~Base() {}  // 다형성을 위해 가상 소멸자를 추가합니다.
};

class Derived : public Base {};

int main() {
    Base* obj = new Derived();

    // 객체의 실제 클래스 이름을 출력
    std::cout << "Class name: " << typeid(*obj).name() << std::endl;

    delete obj;
    return 0;
}

(Output)

Class name: class Derived

C++, 클래스의 이름 알아내기

 

설명

  • typeid(*obj).name()을 사용하여 obj 포인터가 가리키는 객체의 실제 클래스 이름을 얻을 수 있습니다.
  • typeid(*obj)는 객체의 실제 유형을 반환하며, 이 정보는 std::type_info 객체에 저장됩니다.
  • name() 메서드를 호출하면 클래스 이름을 반환합니다. 다만, 이 이름은 컴파일러마다 다르게 표시될 수 있으며, 예를 들어 g++에서는 컴파일러가 가독성을 떨어뜨리는 형태로 출력할 수 있습니다.

 

반응형