使用 boost spirit x3 将数字解析为字符串
Parsing a number into a string with boost spirit x3
我想用精神x3把各种数字解析成一个字符串。我试过这样做,但是没有用。
typedef x3::rule<class int_parser_id, std::string> int_parser_type;
const int_parser_type int_parser = "int_parser";
auto const int_parser_def = x3::int32;
如何使用 x3::int32 解析器将 Int 解析为字符串?
解析是扫描字符串以生成具体类型或类型集的对象;你所要求的是相反的,Spirit 称之为 'generation'。 Spirit.X3 只执行解析,所以你直接问题的答案是:你不能。
但是,Spirit 确实带有单独的生成组件:Spirit.Karma。
namespace karma = boost::spirit::karma;
int const i = /*...*/;
std::string str;
karma::generate(std::back_inserter(str), karma::int_, i);
必须注意,Karma 是一个 C++03 代码库,因此编译时间比 X3 长得多——强烈建议使用预编译头文件!
我想用精神x3把各种数字解析成一个字符串。我试过这样做,但是没有用。
typedef x3::rule<class int_parser_id, std::string> int_parser_type;
const int_parser_type int_parser = "int_parser";
auto const int_parser_def = x3::int32;
如何使用 x3::int32 解析器将 Int 解析为字符串?
解析是扫描字符串以生成具体类型或类型集的对象;你所要求的是相反的,Spirit 称之为 'generation'。 Spirit.X3 只执行解析,所以你直接问题的答案是:你不能。
但是,Spirit 确实带有单独的生成组件:Spirit.Karma。
namespace karma = boost::spirit::karma;
int const i = /*...*/;
std::string str;
karma::generate(std::back_inserter(str), karma::int_, i);
必须注意,Karma 是一个 C++03 代码库,因此编译时间比 X3 长得多——强烈建议使用预编译头文件!