如何解析可能包含double或int的字符串,具体取决于是否设置了点。例如。 6.0是双重类型,6是int类型。规则是
rule<it,boost::variant<int,double>,skipper> r = qi::double_|qi::int_;
但是,在这种情况下,对于所有数字,流将以double形式提供。
答案 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_
只有在没有点后面才会匹配整数。否则,它将匹配双倍。