por que essa conversão não funciona?
-
12-09-2019 - |
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?
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.