【发布时间】:2016-09-25 14:36:25
【问题描述】:
如果T 类型的key 不是有效键,我想抛出domain_error 类型的异常。
但我不知道如何将任何类型的T 转换为字符串,只要定义了T::operator std::string(),例如int 不支持这个。
这显然是错误的,因为它只适用于非常特定的类型:
throw std::domain_error("key error: "+static_cast<std::string>(key));
如何做到这一点?
编辑
建议使用模板规范后我的解决方案
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));
【问题讨论】:
标签: c++ string exception casting