>  기사  >  백엔드 개발  >  C 템플릿에서 유형 이름을 얻는 방법은 무엇입니까?

C 템플릿에서 유형 이름을 얻는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-15 08:58:02559검색

How to Get Type Name in C   Templates?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.