type_info 클래스
type_info 클래스는 컴파일러가 프로그램 내에서 생성된 형식 정보를 설명합니다. 이 클래스의 개체는 형식의 이름에 대한 포인터를 효과적으로 저장합니다. 또한 type_info 클래스는 같음 또는 정렬 순서에 대해 두 형식을 비교하는 데 적합한 인코딩된 값을 저장합니다. 형식의 인코딩 규칙 및 정렬 시퀀스는 지정되지 않으며 프로그램 간에 다를 수 있습니다.
<typeinfo>
type_info 클래스를 사용하려면 헤더 파일을 포함해야 합니다. type_info 클래스의 인터페이스는 다음과 같습니다.
class type_info {
public:
type_info(const type_info& rhs) = delete; // cannot be copied
virtual ~type_info();
size_t hash_code() const;
_CRTIMP_PURE bool operator==(const type_info& rhs) const;
type_info& operator=(const type_info& rhs) = delete; // cannot be copied
_CRTIMP_PURE bool operator!=(const type_info& rhs) const;
_CRTIMP_PURE int before(const type_info& rhs) const;
size_t hash_code() const noexcept;
_CRTIMP_PURE const char* name() const;
_CRTIMP_PURE const char* raw_name() const;
};
클래스에 프라이빗 복사 생성자만 있으므로 type_info 클래스의 개체를 직접 인스턴스화할 수 없습니다. (임시) type_info 개체를 생성하는 유일한 방법은 typeid 연산자를 사용하는 것입니다. 대입 연산자도 프라이빗이므로 클래스 type_info 개체를 복사하거나 할당할 수 없습니다.
type_info::hash_code
는 typeinfo 형식의 값을 인덱스 값의 분포에 매핑하는 데 적합한 해시 함수를 정의합니다.
연산 ==
자를 !=
사용하여 각각 다른 type_info 개체와 같음 및 같지 않음을 비교할 수 있습니다.
형식의 정렬 순서와 상속 관계 간에 링크가 없습니다. 멤버 함수를 type_info::before
사용하여 형식의 정렬 시퀀스를 확인합니다. 서로 다른 프로그램이나 동일한 프로그램의 다른 실행에서 동일한 결과를 얻을 것이라는 보장 type_info::before
은 없습니다. 이러한 방식으로 type_info::before
주소 (&)
연산자는 비슷합니다.
멤버 함수는 type_info::name
사람이 읽을 수 있는 형식 이름을 나타내는 null로 끝나는 문자열을 반환 const char*
합니다. 가리키는 메모리는 캐시되며 직접 할당 해지되면 안 됩니다.
type_info::raw_name
멤버 함수는 Microsoft 전용입니다. 개체 형식의 const char*
데코레이팅된 이름을 나타내는 null로 끝나는 문자열을 반환합니다. 이름은 공간을 절약하기 위해 데코레이팅된 형식으로 저장됩니다. 따라서 이 함수는 이름을 취소할 필요가 없기 때문에 더 type_info::name
빠릅니다. 함수에서 반환된 type_info::raw_name
문자열은 비교 작업에 유용하지만 읽을 수 없습니다. 사람이 읽을 수 있는 문자열이 필요한 경우 대신 사용합니다 type_info::name
.
형식 정보는 /GR(런타임 형식 정보 사용) 컴파일러 옵션이 지정된 경우에만 다형 클래스에 대해 생성됩니다.