1
如果key
類型T
不是有效密鑰,我想拋出類型domain_error
的異常。 但我不知道如何將任何類型的T
轉換爲字符串,只要定義了T::operator std::string()
,例如int
不支持此操作。Excpetion消息:插入字符串表示錯誤值
這是obvioulsy錯誤的,因爲它僅適用於非常特殊的類型:
throw std::domain_error("key error: "+static_cast<std::string>(key));
如何才能做到這一點?
編輯
的建議後,我的解決方案中使用的模板specilisation
template <class T> std::string to_string(const T t)
{
return static_cast<std::string>(t);
}
template <> std::string to_string<unsigned int>(const unsigned int i)
{
std::stringstream ss;
std::string ret;
ss << i;
ss >> ret;
return ret;
}
...
std::string domain_error(const IS& is) const
{
using namespace IDTranslator_detail;
return "key error: "+to_string(is), "error";
}
...
throw std::domain_error(domain_error(key));
謝謝,我做了模板專業化。 –