Вот удобная служебная функция для разбора чисел на основе потоков:
template <class T>
bool try_parse_number(std::string_view s, T& v, const std::locale& locale)
{
std::stringstream stream;
stream.imbue(locale);
stream << s;
stream >> v;
return !stream.fail();
}
Требуются включения <sstream>
, <string_view>
и <locale>
, хотя вы можете исключить обработку локали.
Вы можете дополнительно создать пользовательский языковой стандарт и фасет номера, чтобы в большей степени контролировать разбор числа.