开发用于解析数据的模板类时,您可能会遇到需要在解析失败时生成信息性错误消息的情况。要提供全面的错误消息,您可能需要知道模板函数尝试转换为的类型的名称。
下面提供的代码片段描述了尝试使用专门化检索类型名称的原始代码对于字符串:
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,提供对 T 的重整类型名称的访问。std::type_info 的 name() 方法返回重整类型名称。
将此解决方案集成到您的代码中,您可以修改 catch块如下:
catch(...)throw ParseError(file, section, key, it->second, typeid(T).name());
这种方法提供了一种更灵活、更有效的方式来检索类型名称,而无需显式专门化。
以上是如何检索 C 模板中的类型名称以获取信息性错误消息?的详细内容。更多信息请关注PHP中文网其他相关文章!