首页 >后端开发 >C++ >如何检索 C 模板中的类型名称以获取信息性错误消息?

如何检索 C 模板中的类型名称以获取信息性错误消息?

DDD
DDD原创
2024-11-16 15:18:03806浏览

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,提供对 T 的重整类型名称的访问。std::type_info 的 name() 方法返回重整类型名称。

将此解决方案集成到您的代码中,您可以修改 catch块如下:

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

这种方法提供了一种更灵活、更有效的方式来检索类型名称,而无需显式专门化。

以上是如何检索 C 模板中的类型名称以获取信息性错误消息?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn