c++ rtti 예제

이 예제에는 형식 Base포인터에서 파생된 형식의 지점까지 두 개의 동적 캐스트가 있습니다. 그러나 #1 성공적입니다. type_info:name이 전체 형식 이름을 반환하는 구현 중 하나를 사용하여 출력을 표시하는 예제입니다. gcc 또는 이와 유사한 경우 c++filt -t를 통해 필터링합니다. dynamic_cast는 개체에 대한 포인터 및 참조와 함께만 사용할 수 있습니다. 형식 변환의 결과가 유효하고 요청된 클래스의 전체 개체인지 확인합니다. 이것은 dynamic_cast가 클래스를 기본 클래스 중 하나에 캐스팅하는 데 사용하는 경우 항상 성공하는 방법입니다. 예제를 살펴보십시오: 클래스가 다형성인 경우 dynamic_cast는 실행 중에 특별한 검사를 수행합니다. 이 검사는 식이 요청된 클래스의 유효하고 완전한 개체인지 확인합니다. 예제를 살펴보십시오: 다음 예제에서는 첫 번째 코드가 작동하지 않습니다. “dynamic_cast base_ptr(형식 Base*)”와 같은 오류가 생성되어 `클래스 파생*`(소스 유형은 다형성이 아님)을 입력합니다. 이 예제에는 가상 함수가 없기 때문에 이 오류가 발생합니다.

예제에 포함시켰습니다. typeid 연산자는 type_info 헤더 파일에 정의된 클래스인 type_info 개체에 대한 참조를 반환합니다. 이 멤버 함수는 개체 형식의 이름으로 C 스타일 문자열에 대한 포인터를 반환합니다. 예를 들어 이전 예제의 클래스를 사용 하 여: 업 캐스팅 및 다운 캐스팅에 대 한 이전 예제에서 직원 은 바람직하지 않은 메서드 coding()를 가져옵니다. 따라서 메서드를 사용하기 전에 포인터가 프로그래머 개체를 가리키는지 확인해야합니다(). 예제에서는 Base_Class* (즉 ptr_a 및 ptr_b)의 포인터 개체에서 Derived_Class*형식의 포인터 개체에 두 개의 dynamic_casts를 수행합니다. C++에서 RTTI(런타임 형식 정보)는 런타임시 개체의 데이터 형식에 대한 정보를 노출하는 메커니즘이며 하나 이상의 가상 함수가 있는 클래스에서만 사용할 수 있습니다. 예를 들어, dynamic_cast는 프로그램 실행 중에 개체 유형을 결정할 수 있습니다. 기본 클래스 B의 가상 함수입니다. typeid의 사용은 종종 dynamic_cast 클래스 정보만 필요한 경우 형식, 형식 또는 참조되지 않은 값에 적용된 typeid가 상수 시간 프로시저인 반면, dynamic_cast는 클래스를 트래버스해야 하는 경우가 많습니다. 런타임시 해당 인수의 격자 를 파생시입니다.

그러나 std::type_info:name(std::type_info:name)에서 반환되는 것과 같이 컴파일과 관련하여 특정 구현에 따라 정확한 콘텐츠에 의존해서는 안 됩니다.