qi :: uint_parser <int>()究竟应该解析什么?

时间:2016-12-07 14:37:59

标签: boost-spirit-qi

从测试中我可以得到qi::uint_parser<int>()qi::uint_相同。它们解析从0UINT_MAX的整数。

我不明白qi::uint_parser要求std::numeric_limits<T>::max()对数字基类型T有效。我不确定是否应该假设qi::uint_parser<int>()应解析从0std::numeric_limits<int>::max()而不是std::numeric_limits<unsigned int>::max()的整数。或者此要求与解析器的范围无关?

2 个答案:

答案 0 :(得分:0)

我认为这会重复How to write a boost::spirit::qi parser to parse an integer range from 0 to std::numeric_limits<int>::max()?以及我记得在邮件列表中看到的问题。

由于显然没有记录,你测试过吗?

  

或者此要求与解析器的范围无关?

我希望它是后者。我希望属性类型说明属性,而不是解析器。解析器解析,属性传播分配给属性。分离关注点。

属性传播可能会进行C ++语言的任何隐式转换。这实际上与在unsigned中使用scanf("%d")或使用std::istream读取unsigned int没有什么不同: 见How to read unsigned int variables from file correctly, using ifstream?

我希望这一切都是真的,因为C ++结合了

的语言核心价值
  • 仅支付您需要的费用
  • 程序员知道他在做什么。

事实上,这是问题的根源:Spirit定义qi::int_qi::uint_和朋友。如果您使用基础qi::[u]int_parser<>模板拼凑自定义组合,您就会告诉编译器&#34;我知道我在做什么&#34;。

免责声明:所有这些都是非权威性的。我甚至没有查看代码/文档。我认为这基本上是一个文档问题,最好在mailing list

上提出

答案 1 :(得分:0)

现在在boost 1.68.0上已解决问题。 p_param varchar解析从qi::uint_parser<int>()0的整数。精神x3也是固定的。

https://github.com/boostorg/spirit/pull/297

相关问题