데이터 구문 분석을 위한 템플릿 클래스를 개발할 때 구문 분석 실패 시 유용한 오류 메시지를 생성해야 할 수도 있습니다. 포괄적인 오류 메시지를 제공하려면 템플릿 함수가 변환을 시도하는 유형의 이름을 알아야 할 수도 있습니다.
아래 제공된 코드 조각은 특수화를 사용하여 유형 이름을 검색하려고 시도하는 원본 코드를 보여줍니다. 문자열의 경우:
template<typename T> T GetValue(const std::wstring &section, const std::wstring &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 중국어 웹사이트의 기타 관련 기사를 참조하세요!