guauuu. ¿y eso como se usa? ¿puedes poner un ejemplo donde pueda compilarlo para ver como funciona y depurarlo a ver si me entero?
Creo que entiendo lo que hace tu funcion pero lo que haces de enum class no soy capaz de que compile.
Edito:
Tuve que modificar tu codigo porque eso que pones de enum class mi compilador no se lo traga y supongo que o bien el compilador que uso es anterior a c++11 que creo que es donde se metio eso segun he leido, o bien no es estandard o yo que se jajaja.
Asi lo he dejado:
Código C++:
Ver original//---------------------------------------------------------------------------
#include <iostream>
#include <sstream>
using namespace std;
enum ConvertError
{
NoError,
Overflow,
WrongFormat
};
//---------------------------------------------------------------------------
ConvertError ToInt( std::istream& stream, int& value )
{
ConvertError toReturn = NoError;
bool negate = false;
bool firstChar = true;
value = 0;
bool nextIteration = true;
do
{
char c = stream.peek();
if( c == EOF )
nextIteration = false;
else
{
stream.get(); // discard from the stream
if( c==' ' || c=='\n' || c=='\r' || c=='\t' )
nextIteration = false;
{
int newValue = value*10+c-'0';
if( newValue < value )
{
nextIteration = false;
toReturn = Overflow;
}
value = newValue;
}
else
{
if( (c != '-' && c != '+') || !firstChar )
{
nextIteration = false;
toReturn = WrongFormat;
}
else
negate = (c=='-');
}
}
firstChar = false;
} while(nextIteration);
if( negate )
value *= -1;
return toReturn;
}
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
stringstream stream;
string aux;
int valor;
cin >> aux;
stream <<aux;
switch(ToInt(stream,valor)){
case 0:
cout<<"El valor es: "<<valor<<endl;
break;
case 1:
cout<<"Huvo overflow"<<endl;
break;
case 2:
cout<<"Formato incorrecto"<<endl;
break;
}
return 0;
}
//---------------------------------------------------------------------------
Por cierto no sabia que un enum se podia usar como tipo de retorno.
Otra cosa ¿que virtudes tiene tu codigo con respecto al mio?
Y si quieres echar un vistazo a como hago para ejecutar tu funcion y me dices si es correcto o hay un camino mas corto para no tener que usar stringstream...