qi::uint_parser<int>() 应该准确解析什么?
What should qi::uint_parser<int>() parse exactly?
通过测试我可以得到 qi::uint_parser<int>()
与 qi::uint_
相同。他们解析从 0
到 UINT_MAX
的整数。
我不明白的是 qi::uint_parser
要求 std::numeric_limits<T>::max()
对数字基类型 T
有效。我不确定我是否应该假设 qi::uint_parser<int>()
应该解析从 0
到 std::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>()
解析从 0
到 std::numeric_limits<int>::max()
的整数。 spirit x3也是固定的。
通过测试我可以得到 qi::uint_parser<int>()
与 qi::uint_
相同。他们解析从 0
到 UINT_MAX
的整数。
我不明白的是 qi::uint_parser
要求 std::numeric_limits<T>::max()
对数字基类型 T
有效。我不确定我是否应该假设 qi::uint_parser<int>()
应该解析从 0
到 std::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>()
解析从 0
到 std::numeric_limits<int>::max()
的整数。 spirit x3也是固定的。