我可以测试解析的数字作为规则的一部分吗?整数_ <= 120

Can I test a parsed number as part of the rule. int_ <= 120

我是 spirit::qi 2.5.2 的新手,我不确定是否可以将解析值作为规则的一部分进行测试。

我看过这个;

bool c = true; // a flag
test_parser("1234", eps(phx::ref(c) == true) >> int_);
test_phrase_parser("1 2 3 4",
  *(eps(phx::ref(c) == true) >> int_[phx::ref(c) = (_1 == 4)]));

和这个 Parse time_period expression with Boost::Spirit 但解析器会将 50:90:90 作为有效时间除外;

我想先解析数字,然后确保它 <= 值。

void TestRule()
{
  using boost::phoenix::ref;
  using qi::_1;
  using qi::_val;
  using qi::eps;

  qi::uint_parser<unsigned int, 10, 2, 2> uint2_p;

  std::wstring mTime = L"50:90:90";  // This should fail as it isn't a valid time

  auto f = mTime.begin(), l = mTime.end();

  bool validTime = qi::parse(f, l, uint2_p[_val = _1] >> eps(_val <= 24) >> ":" >> uint2_p >> ":" >> uint2_p);
}

以上代码失败。

我可以这样做还是需要使用函数?

谢谢。

这正确地验证了像 23:59:59 这样的输入,而对于像 24:00:00 这样的输入则失败了。

bool validTime = qi::parse(f, l, uint2_p[ _pass = _1<24] >> ":" >> uint2_p[ _pass = _1<60] >> ":" >> uint2_p[ _pass = _1<60]);

感谢您花时间看我的问题。