Più generico:
In LexicalCast.hpp
codice:
#ifndef LEXICALCAST_HPP_INCLUDED
#define LEXICALCAST_HPP_INCLUDED
#include <sstream>
#include <string>
#include <stdexcept>
class BadLexicalCast : std::runtime_error
{
public:
BadLexicalCast() : runtime_error("Bad lexical cast") {};
};
template <typename T>
T LexicalCast(const std::string & str)
{
std::istringstream is(str);
T out;
is>>out;
if(is.fail())
throw BadLexicalCast();
return out;
}
#endif
Dall'esterno:
codice:
#include "LexicalCast.hpp"
// ...
int i=LexicalCast<int>("52");
double d=LexicalCast<double>("54.3E5");