qi::uint_parser<int>() 应该准确解析什么?

What should qi::uint_parser<int>() parse exactly?

通过测试我可以得到 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()。或者这个要求与解析器的范围无关?

我认为这重复了 以及我记得在邮件列表中看到的问题。

因为它显然没有记录,你测试了吗?

Or is this requirement has nothing to do with the parser's range?

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

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

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

的语言核心价值
  • 按需付费
  • 程序员知道他在做什么。

其实这就是问题的根源:精神定义了qi::int_qi::uint_和朋友。如果您使用基础 qi::[u]int_parser<> 模板拼凑自定义组合,您就是在告诉编译器 "I know what I'm doing".

免责声明:所有这些都是非权威的。我什至没有检查 code/docs。我认为这本质上是一个文档问题,最好在 mailing list

上提出

问题现已在 boost 1.68.0 上解决。 qi::uint_parser<int>() 解析从 0std::numeric_limits<int>::max() 的整数。 spirit x3也是固定的。

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