2

如何根据是否设置点来解析可能包含 double 或 int 的字符串。例如 6.0 是 double 类型,而 6 是 int 类型。规则是

rule<it,boost::variant<int,double>,skipper> r = qi::double_|qi::int_;

但是,在这种情况下,对于所有数字,流将被双倍馈送。

4

2 回答 2

4

除了interjay给出的务实方法1,看看real_parser_policies

real_parser<double,strict_real_policies<double>>() | int_

会同样好。


1我有时会自己使用(您应该能够在 SO 上找到答案)。但是请注意,当输入为 eg 时123e-5出现问题(它将解析一个 int,e-5而未解析)。

于 2013-07-01T07:01:48.547 回答
0

我认为这应该有效:

(int_ >> !lit('.')) | double_

只有当它后面没有点时,它才会匹配一个整数。否则,它将匹配双精度数。

于 2013-06-30T17:34:08.783 回答