por eso esta conversión no funciona?
-
12-09-2019 - |
Pregunta
A continuación se muestra mi func. Lo llamo con
if(try_strtol(v, rhs))
y RHS = "15 \ t // comentario"
bool try_strtol(int64_t &v, const string& s)
{
try
{
std::stringstream ss(s);
if ((ss >> v).fail() || !(ss >> std::ws).eof())
throw std::bad_cast();
return true;
}
catch(...)
{
return false;
}
}
Devuelve falso, i excepto cierto con v = 15. ¿Cómo puedo solucionar esto?
Solución
Si quieres que regrese un valor lógico, simplemente hacer esto:
bool try_strtol(int64_t &v, const string& s)
{
std::stringstream ss(s);
return (ss >> v).fail() || !(ss >> std::ws).eof();
}
Y está fallando debido a que es un mal reparto. ¿Esperabas el comentario sería ignorado?
Otros consejos
¿Por qué se puede esperar (ss >> std::ws).eof()
para ser verdad? RHS contiene caracteres no está en blanco después de 15, por lo que la condición de si será verdad y la excepción será lanzado, por lo que devuelve falso.
Después de std :: ws se salta la ficha, sin embargo, no está en EF.
Si en espera de que la corriente IO manejaría comentario C ++ como un espacio en blanco, que no es el caso.