Ограничение существующего Boost.Spirit real_parser (с политикой)

Я хочу проанализировать число с плавающей запятой, но не разрешить значения NaN, поэтому я создаю политику, которая наследуется от политики по умолчанию, и создаюreal_parser с этим:

// using boost::spirit::qi::{real_parser,real_policies,
//                           phrase_parse,double_,char_};

template <typename T>
struct no_nan_policy : real_policies<T>
{
    template <typename I, typename A>
    static bool
    parse_nan(I&, I const&, A&) {
          return false;
    }    
};

real_parser<double, no_nan_policy<double> > no_nan;

// then I can use no_nan to parse, as in the following grammar
bool ok = phrase_parse(first, last, 
   no_nan[ref(valA) = _1] >> char_('@') >> double_[ref(b) = _1],
space);

Но теперь ятакже&nbsp;хочу убедиться, что общая длина строки проанализирована сno_nan&nbsp;не превышает 4, то есть «1.23» или «.123» или даже «2.e6» или «inf» - это нормально, «3.2323» - нет, и не «nan». Я не могу сделать это вparse_n/parse_frac_n&nbsp;раздел политики, который отдельно смотрит влево / вправо от точки и не может общаться (... чисто), что они должны были бы св общем и целом&nbsp;длина имеет значение

Идея заключалась в том, чтобы расширитьreal_parser&nbsp;(вboost/spirit/home/qi/numeric/real.hpp) а такжеобернутьparse&nbsp;метод&nbsp;- но у этого класса нет методов. Рядом сreal_parser&nbsp;этоany_real_parser&nbsp;структура, котораяделает&nbsp;иметьparse, но эти две структуры, кажется, не взаимодействуют каким-либо очевидным образом.

Есть ли способ легко внедрить мой собственный parse (), сделать некоторые предварительные проверки, а затем вызватьреальный&nbsp;разбор (return boost::spirit::qi::any_real_parser<T, RealPolicy>::parse(...)) который тогда придерживается данной политики? Написание нового парсера было бы последним средством, но я надеюсь, что есть лучший способ.

(Использование Boost 1.55, то есть Spirit 2.5.2, с C ++ 11)