C 템플릿에서 유형 이름 가져오기
C 템플릿 프로그래밍에서 변환되는 유형의 이름을 얻는 것은 오류 처리에 매우 중요할 수 있습니다. . 대부분의 구문 분석 오류가 데이터 파일 오류에서 발생하는 템플릿 클래스 구문 분석 데이터 파일을 고려해보세요. 사용자에게 친숙한 오류 메시지를 제공하려면 예상되는 데이터 유형을 식별하는 것이 필수적입니다.
일반 GetValue 함수는 섹션 및 키 입력을 기반으로 데이터 맵에서 값을 검색합니다. 예상 값을 원하는 유형으로 변환할 수 없으면 예외가 발생합니다. 그러나 오류 메시지에 포함될 것으로 예상되는 유형 이름을 결정하는 것은 어려울 수 있습니다.
컴파일 시간 솔루션
유형을 사용하여 우아한 컴파일 시간 솔루션을 얻을 수 있습니다. 자체 검사 및 사전 정의된 매크로. 함수 템플릿 GetTypeName을 정의하는 헤더 파일(types.h)을 생성합니다.
template<typename T> const wchar_t *GetTypeName(); #define DEFINE_TYPE_NAME(type, name) \ template<>const wchar_t *GetTypeName<type>(){return name;}
.cpp 파일의 DEFINE_TYPE_NAME 매크로를 사용하여 데이터 파일 구문 분석 프로세스에서 발견되는 유형의 유형 이름을 정의합니다.
DEFINE_TYPE_NAME(int, L"int") DEFINE_TYPE_NAME(float, L"float") DEFINE_TYPE_NAME(std::string, L"std::string")
GetValue 함수 내에서 다음을 사용하여 유형 이름을 검색합니다.
const wchar_t *typeName = GetTypeName<T>();
이 접근 방식을 사용하면 정의되지 않은 유형이 발견되면 링커 오류가 생성되어 필요한 유형 정의를 추가하라는 메시지가 표시됩니다. .
RTTI(런타임 유형 식별)를 사용하는 대체 솔루션
RTTI를 사용하여 런타임 솔루션을 얻을 수 있습니다.
std::type_info(T).name()
그러나 이 솔루션은 런타임 오버헤드가 발생하므로 자주 호출되는 함수에 적합하지 않습니다.
위 내용은 C 템플릿에서 유형 이름을 얻는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!