C ++获取模板中的类型名称
我正在编写一些用于解析某些文本数据文件的模板类,因此很可能大部分解析错误是由于数据文件中的错误而引起的,这些错误大部分不是程序员编写的,因此需要关于应用为何无法加载的好消息,例如: 解析example.txt时出错。[MySectiom]键的值(“ notaninteger”)不是有效的int 我可以从传递给模板函数的参数以及类中的成员vars得出文件名,节名和键名,但是我不确定如何获取模板函数尝试转换为的类型的名称。 我当前的代码看起来像,只对纯字符串等进行了专门化处理: 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)); } } 宁可不必对数据文件可能使用的每种类型都进行特定的重载,因为它们有很多负载... 我还需要一个解决方案,除非出现异常,否则不会产生任何运行时开销,即我想要一个完全编译时的解决方案,因为此代码被称为“成千上万次”,并且加载时间已经有些长了。 编辑:好的,这是我想出的解决方案: …