boost :: spirit :: qi :: double_和boost :: spirit :: qi :: int_

时间:2013-06-30 17:08:14

标签: c++ boost-spirit

如何解析可能包含double或int的字符串,具体取决于是否设置了点。例如。 6.0是双重类型,6是int类型。规则是

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

但是,在这种情况下,对于所有数字,流将以double形式提供。

2 个答案:

答案 0 :(得分:4)

除了interjay给出的实用主义方法 1 之外,请看real_parser_policies

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

也同样好。


1 我有时会自己使用(你应该能够在SO上找到an answer doing this)。但请注意,当输入为例如时,问题。 123e-5(将解析一个int,留下e-5未解析的。)

答案 1 :(得分:0)

我认为这应该有效:

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

只有在没有点后面才会匹配整数。否则,它将匹配双倍。