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.

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top