21 июня 2010

Lexical_cast using Spirit

Если хочется быстро заменить lexical_cast на парсеры из Spirit-а (для увеличения скорости парсинга, например):
template <class T>
inline T spirit_cast(std::string const & input)
{
T value;

std::string::const_iterator begin = input.begin();
bool result = boost::spirit::qi::parse(begin, input.end(), value);

if (!result || begin != input.end())
throw std::bad_cast();

return value;
};