También, ya que estás en C++, puedes aprovechar los templates:
Código C++:
Ver original#include <iostream>
#include <stdexcept>
#include <string>
template< typename T >
bool Convert( const std::string&, T& )
{
return false;
}
template< >
bool Convert( const std::string& cadena, int& valor )
{
try
{
valor = std::stoi( cadena );
return true;
}
catch( const std::invalid_argument& )
{
return false;
}
}
template< >
bool Convert( const std::string& cadena, float& valor )
{
try
{
valor = std::stof( cadena );
return true;
}
catch( const std::invalid_argument& )
{
return false;
}
}
int main( )
{
std::string cad;
std::cout << "Introduce un número entero: " << std::endl;
std::cin >> cad;
int entero;
if( Convert( cad, entero ) )
std::cout << "El número es: " << entero << std::endl;
else
std::cout << "No es un número válido" << std::endl;
std::cout << "Introduce un número decimal: " << std::endl;
std::cin >> cad;
float decimal;
if( Convert( cad, decimal ) )
std::cout << "El número es: " << decimal << std::endl;
else
std::cout << "No es un número válido" << std::endl;
}