>  기사  >  백엔드 개발  >  정보 오류 메시지를 위해 C 템플릿에서 유형 이름을 검색하는 방법은 무엇입니까?

정보 오류 메시지를 위해 C 템플릿에서 유형 이름을 검색하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-16 15:18:03748검색

How to Retrieve Type Names in C   Templates for Informative Error Messages?

C 템플릿에서 유형 이름 검색

데이터 구문 분석을 위한 템플릿 클래스를 개발할 때 구문 분석 실패 시 유용한 오류 메시지를 생성해야 할 수도 있습니다. 포괄적인 오류 메시지를 제공하려면 템플릿 함수가 변환을 시도하는 유형의 이름을 알아야 할 수도 있습니다.

아래 제공된 코드 조각은 특수화를 사용하여 유형 이름을 검색하려고 시도하는 원본 코드를 보여줍니다. 문자열의 경우:

template<typename T> T GetValue(const std::wstring &amp;section, const std::wstring &amp;key)
{
    std::map<std::wstring, std::wstring>::iterator it = map[section].find(key);
    if(it == map[section].end())
        throw ItemDoesNotExist(file, section, key)
    else
    {
        try{return boost::lexical_cast<T>(it->second);}
        //needs to get the name from T somehow
        catch(...)throw ParseError(file, section, key, it->second, TypeName(T));
    }
}

대체 솔루션은 다음을 사용하는 것입니다.

typeid(T).name()

typeid(T) 함수는 std::type_info의 인스턴스를 반환합니다. 이는 맹글링된 유형 이름에 대한 액세스를 제공합니다. std::type_info의 name() 메서드는 demangled 유형 이름을 반환합니다.

이 솔루션을 코드에 통합하면 다음과 같이 catch 블록을 수정할 수 있습니다.

catch(...)throw ParseError(file, section, key, it->second, typeid(T).name());

이 접근 방식은 명시적인 특수화 없이 유형 이름을 검색하는 보다 유연하고 효율적인 방법을 제공합니다.

위 내용은 정보 오류 메시지를 위해 C 템플릿에서 유형 이름을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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