假设我有一个std::string
属性,但为了便于解析,我想使用qi::int_
or qi::double_
。
有没有一种简单的方法可以将转换作为语义操作?
我试过这样的事情:
std::stringstream ss;
my_int_as_str = qi::int_ [ ref(ss)<<_1; _val=ss.str() ];
但这甚至不会编译。
编辑 - 尝试下面的 sehe 答案
#include <iostream>
#include <string>
#include <vector>
#include <boost/spirit/include/qi.hpp>
namespace qi=boost::spirit::qi;
namespace phx=boost::phoenix;
int main(int argc, char* argv[])
{
std::string test="123";
std::string result;
// 1. qi::raw[ qi::int_ ] works
// 2. qi::lexeme[ qi::int_ ] doesn't
// 3. qi::as_string[ qi::int_ ] doesn't
qi::rule<std::string::const_iterator, std::string()> my_int_as_str =
qi::raw[ qi::int_ ];
parse( test.cbegin(), test.cend(), my_int_as_str, result );
std::cout << result << std::endl;
// -------------------------------------------------------------------------
std::string test_vector="456 789";
std::vector<std::string> result_vector;
// 4. qi::raw[ qi::int_ ] won't compile
// 5. qi::lexeme[ qi::int_ ] won't compile
// 6. qi::as_string[ qi::int_ ] doesn't
qi::rule<std::string::const_iterator,std::vector<std::string>(),qi::space_type>
my_int_as_str_vector = qi::lexeme[ qi::int_ ];
phrase_parse(test_vector.cbegin(),test_vector.cend(),
my_int_as_str_vector,qi::space,result_vector);
for(auto& string: result_vector)
std::cout << string << std::endl;
return 0;
}