我正在写一些模板类来parsing一些文本数据文件,就像这样,绝大多数parsing错误是由于数据文件中的错误造成的,而这些错误大部分都不是程序员写的,所以需要一个很好的消息,为什么应用程序未能加载,如: parsingexample.txt时出错。 [MySectiom]键的值(“notaninteger”)不是有效的int 我可以从传递给模板函数和类成员variables的参数中创build文件,节和键名称,但是我不知道如何获取模板函数试图转换的types的名称。 我目前的代码看起来像专门为简单的string和这样的: template<typename T> T GetValue(const std::wstring §ion, 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)); } } 而不必为数据文件可能使用的每种types制定特定的重载,因为它们有负载… 此外,我需要一个解决scheme,不会产生任何运行时间的开销,除非发生exception,即完全编译时解决scheme是我想要的,因为这个代码被称为吨的时间和加载时间已经有点长。 编辑:好吧,这是我想出的解决scheme: 我有一个types.h包含以下内容 #pragma once template<typename T> […]