从测试中我可以得到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()
的整数。或者此要求与解析器的范围无关?
答案 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也是固定的。