我有一个解析器,它解析来自输入文件的不同数据类型。我已经想通了,这种精神可以在 short 和 int 之间做出决定,例如:
value %= (shortIntNode | longIntNode);
和
shortIntNode %= (qi::short_ >> !qi::double_)
[qi::_val = phoenix::bind(&CreateShortIntNode, qi::_1)];
longIntNode %= (qi::int_ >> !qi::double_)
[qi::_val = phoenix::bind(&CreateLongIntNode, qi::_1)];
我也使用这种类型的规则来检测双打(来自这里和这里的答案)。解析器能够在数字 > 65535 的 int 和数字 <= 65535 的 short 之间做出决定。但是,对于 float_ 和 double_ 它不能按预期工作。如果有这样的规则,它只是将这些值四舍五入以将其解析为浮点值:
value %= (floatNode | doubleFloatNode);
和
floatNode %= (qi::float_)
[qi::_val = phoenix::bind(&CreateFloatNode, qi::_1)];
doubleFloatNode %= (qi::double_)
[qi::_val = phoenix::bind(&CreateDoubleFloatNode, qi::_1)];
您知道是否有类似选项或其他技巧可以根据数据类型范围在 float_ 和 double_ 之间做出决定?
非常感谢!