開發用於解析資料的範本類別時,您可能會遇到需要在解析失敗時產生資訊性錯誤訊息的情況。要提供全面的錯誤訊息,您可能需要知道範本函數嘗試轉換為的類型的名稱。
下面提供的程式碼片段描述了嘗試使用專門化擷取類型名稱的原始程式碼對於字串:
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中文網其他相關文章!