У меня есть следующая функция, которая преобразует строку в числовой тип данных:Как я могу расширить лексический бросок для поддержки перечисленных типов?
template <typename T>
bool ConvertString(const std::string& theString, T& theResult)
{
std::istringstream iss(theString);
return !(iss >> theResult).fail();
}
Это не работает для перечисляемых типов, однако, так что я сделал что-то вроде этого:
template <typename T>
bool ConvertStringToEnum(const std::string& theString, T& theResult)
{
std::istringstream iss(theString);
unsigned int temp;
const bool isValid = !(iss >> temp).fail();
theResult = static_cast<T>(temp);
return isValid;
}
(Я исхожу из предположения, что строка имеет допустимое значение для перечисляемого типа, я использую это в основном для простой сериализации)
Есть ли способ создать единую функцию, которая сочетает в себе обе эти функции?
Я немного поиграл с аргументами шаблона, но ничего не придумал; было бы неплохо не называть одну функцию для перечисленных типов, а другую для всего остального.
Спасибо
+1. Я также собирался написать комментарий о том, почему этого не было в стандартной библиотеке, пока я не прочитал ответ GMan ниже. – Jon
boost больше не нужен, поскольку std :: enable_if и std :: is_enum предоставляют эти функции в C++ 11 – moala