Pergunta

Abaixo está a minha func. Eu chamo-lhe com

if(try_strtol(v, rhs))

e RHS = "15 \ t // comentário"

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;
    }
}

Ele retorna falso, I, excepto verdadeiro com v = 15. Como faço para corrigir isso?

Foi útil?

Solução

Se você quer que ele retornar um boolean, basta fazer o seguinte:

bool try_strtol(int64_t &v, const string& s)
{
    std::stringstream ss(s);
    return (ss >> v).fail() || !(ss >> std::ws).eof();
}

E está falhando porque é um mau elenco. você estava esperando que o comentário seria ignorada?

Outras dicas

Por que você espera (ss >> std::ws).eof() para ser verdade? rhs contém caracteres não-espaço em branco depois de 15, de modo a se a condição será verdadeira eo exceção será lançada, razão pela qual ele retorna false.

Depois de std :: ws ignora o guia, você não está em ainda eof.

Se você estava esperando que o fluxo IO iria lidar com comentário C ++ como espaço em branco, que não é o caso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top