String a int utilizzando spirito spinta
-
30-09-2019 - |
Domanda
ho sentito che lo spirito è veramente veloce nella conversione stringa in int.
Sono comunque in grado di creare una semplice funzione che può farlo. Qualcosa di simile
int STRING_TO_INT (string & s) { / * * ????? / }
Can spirito utilizzo chiunque spinta per riempire in questa funzione.
A proposito sto lavorando su impulso 1,34 e non la versione più recente.
Soluzione
Ci sono diversi modi per raggiungere questo obiettivo:
#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);
o una più breve:
#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);
che si basa sulle caratteristiche auto
dello Spirito. Se si avvolgono uno di questi in una funzione, si ottiene ciò che si vuole.
EDIT: ho visto solo ora che si sta utilizzando Boost 1.34. Così qui è l'incantesimo corrispondente per questo:
#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)]);
Altri suggerimenti
int i = boost::lexical_cast<int>(str);