C + + 11 | 런 타임 형식 인식 (RTTI)
4161 단어 C/C++
type_info 클래스 는 헤더 파일
에서 정의 되 며, C + + 형식의 관련 정 보 를 대표 합 니 다.일반적으로 typeid 연산 자 에서 되 돌아 오 며 스스로 구성 할 수 없습니다.type_info 는 관련 된 것 입 니 다. 서로 다른 컴 파일 도구 체인 의 실현 이 일치 하지 않 을 수 있 습 니 다.
다음 코드 는 int 형식의 이름 을 출력 할 수 있 습 니 다:
const std::type_info &tiInt = typeid(int);
std::cout << "tiInt.name = " << tiInt.name() << std::endl;
type_info 는 다음 과 같은 방법 이 있 습 니 다:
typeid 조작 자 는
에서 설명 합 니 다. 실행 할 때 유형, 변수, 표현 식 의 유형 정 보 를 가 져 오 는 데 사 용 됩 니 다. C + 기본 유형, 내장 류, 사용자 정의 류, 템 플 릿 류 등에 적 용 됩 니 다.그것 은 두 가지 형식 이 있다.
type_index
type_index 클래스 는 헤더 파일
에서 type 이 라 고 설명 합 니 다.info 대상 의 패키지 클래스 는 관련 용기 (예 를 들 어 map) 와 무질서 한 관련 용기 (예 를 들 어 unordered map) 의 색인 으로 사용 할 수 있 습 니 다.다음 코드http://en.cppreference.com/w/cpp/types/type_index) type 사용index 에서 일부 유형의 정 보 를 출력 합 니 다. (디 버 깅 은 꽤 유용 합 니 다.)
struct A {
virtual ~A() {}
};
struct B : A {};
struct C : A {};
int main()
{
std::unordered_map<std::type_index, std::string> type_names;
type_names[std::type_index(typeid(int))] = "int";
type_names[std::type_index(typeid(double))] = "double";
type_names[std::type_index(typeid(A))] = "A";
type_names[std::type_index(typeid(B))] = "B";
type_names[std::type_index(typeid(C))] = "C";
int i;
double d;
A a;
// note that we're storing pointer to type A
std::unique_ptrb(new B);
std::unique_ptrc(new C);
std::cout << "i is " << type_names[std::type_index(typeid(i))] << '';
std::cout << "d is " << type_names[std::type_index(typeid(d))] << '';
std::cout << "a is " << type_names[std::type_index(typeid(a))] << '';
std::cout << "b is " << type_names[std::type_index(typeid(*b))] << '';
std::cout << "c is " << type_names[std::type_index(typeid(*c))] << '';
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
09.문자 / 메모리영역//메모리 영역 스택 데이터 ROM(코드) //읽기전용메모리 문자 char(1),wchar(2) 바이트 . char c = 'a'; wchar_t wc = L'a';...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.