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");