Строка для int с использованием Boost Spirit - PullRequest
3 голосов
/ 15 октября 2010

Я слышал, что Spirit действительно быстро преобразует строку в int.

Однако я не могу создать простую функцию, которая может это сделать.Что-то вроде

int string_to_int (string & s) {/ * ????? * /}

Может ли кто-нибудь использовать повышение духа, чтобы заполнить эту функцию.

Покак я работаю над Boost 1.34, а не последняя версия.

Ответы [ 2 ]

11 голосов
/ 15 октября 2010

Есть несколько способов добиться этого:

#include <boost/spirit/include/qi_parse.hpp>
#include <boost/spirit/include/qi_numeric.hpp>

namespace qi = boost::spirit::qi;

std::string s("123");
int result = 0;
qi::parse(s.begin(), s.end(), qi::int_, result);

или короче:

#include <boost/spirit/include/qi_parse.hpp>
#include <boost/spirit/include/qi_numeric.hpp>
#include <boost/spirit/include/qi_auto.hpp>    
namespace qi = boost::spirit::qi;

std::string s("123");
int result = 0;
qi::parse(s.begin(), s.end(), result);

, основанный на функциях auto Spirit. Если вы превратите один из них в функцию, вы получите то, что хотите.

EDIT: я видел только сейчас, когда вы используете Boost 1.34. Итак, вот соответствующее заклинание для этого:

#include <boost/spirit.hpp>

using namespace boost::spirit;

std::string s("123");
int result = 0;
std::string::iterator b = s.begin();
parse(b, s.end(), int_p[assign_a(result)]);
2 голосов
/ 15 октября 2010

int i = boost::lexical_cast<int>(str);

...