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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top