如何根据是否设置点来解析可能包含 double 或 int 的字符串。例如 6.0 是 double 类型,而 6 是 int 类型。规则是
rule<it,boost::variant<int,double>,skipper> r = qi::double_|qi::int_;
但是,在这种情况下,对于所有数字,流将被双倍馈送。
如何根据是否设置点来解析可能包含 double 或 int 的字符串。例如 6.0 是 double 类型,而 6 是 int 类型。规则是
rule<it,boost::variant<int,double>,skipper> r = qi::double_|qi::int_;
但是,在这种情况下,对于所有数字,流将被双倍馈送。
除了interjay给出的务实方法1,看看real_parser_policies
:
real_parser<double,strict_real_policies<double>>() | int_
会同样好。
1我有时会自己使用(您应该能够在 SO 上找到答案)。但是请注意,当输入为 eg 时会123e-5
出现问题(它将解析一个 int,e-5
而未解析)。
我认为这应该有效:
(int_ >> !lit('.')) | double_
只有当它后面没有点时,它才会匹配一个整数。否则,它将匹配双精度数。