Я хочу исключить тип domain_error
, если key
типа T
недействительный ключ. Но я не знаю, как я мог преобразовать любой тип T
в строку, если T::operator std::string()
определен, как, например, int
не поддерживает это.Excpetion Message: Insert String Представление ошибочного значения
Это 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));
спасибо, я сделал специализацию шаблона. –