Повысить дух или порядок

Я хотел бы создать правило повышения духа, которое анализирует строку и число с плавающей точкой. Строки, которые я хотел бы проанализировать, отформатированы так:

(str astring)(n 123)

или также может быть в другом порядке:

(n 123)(str astring)

Я хотел бы создать правило с атрибутом следующего типа:

qi::rule<Iter, boost::fusion::vector<std::string, float>, ascii::space_type> hj;

Пока это мой код:

qi::rule<Iter, std::string(), ascii::space_type> attr;
attr = lexeme[*alnum];

qi::rule<Iter, boost::fusion::vector<std::string, float>, ascii::space_type> hj;
hj = (
'(' >> lit("str") >> attr(/*put this at position 0*/) >> ')'
|
'(' >> lit("n") >> float_[/*put this at position 1*/] >> ')'
);

Очевидно, что это не компилируется (boost выводит другой тип атрибута). Как я могу реализовать это, особенно, что бы я положил в прокомментированный код?

2

Решение

Вы можете использовать оператор перестановки ^, Минимальный рабочий пример:

boost::fusion::vector<std::string,float> ans;
bool res = phrase_parse(first,last,
(lit("(") >> lit("str") >> lexeme[*ascii::alnum] >> lit(")") ) ^
(lit("(") >> lit("n") >> float_ >> lit(")") ),
ascii::space,ans);

Это решение описано более подробно Вот.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]