【发布时间】:2013-06-30 17:08:14
【问题描述】:
如何根据是否设置点来解析可能包含 double 或 int 的字符串。例如。 6.0 是 double 类型, 6 是 int 类型。规则是
rule<it,boost::variant<int,double>,skipper> r = qi::double_|qi::int_;
但是,在这种情况下,对于所有数字,流将被双倍馈送。
【问题讨论】:
标签: c++ boost-spirit
如何根据是否设置点来解析可能包含 double 或 int 的字符串。例如。 6.0 是 double 类型, 6 是 int 类型。规则是
rule<it,boost::variant<int,double>,skipper> r = qi::double_|qi::int_;
但是,在这种情况下,对于所有数字,流将被双倍馈送。
【问题讨论】:
标签: c++ boost-spirit
除了interjay给出的务实方法1,看看real_parser_policies:
real_parser<double,strict_real_policies<double>>() | int_
同样好。
1 我有时会自己使用(你应该可以在 SO 上找到 an answer doing this)。但是请注意,当输入为例如123e-5(它会解析一个 int,而留下 e-5 未解析)。
【讨论】:
我认为这应该可行:
(int_ >> !lit('.')) | double_
只有当它后面没有点时它才会匹配一个整数。否则,它将匹配一个双精度。
【讨论】:
1e10)