У меня есть следующий парсер,
#define PRICE_MULT 10000
qi::uint_parser<uint32_t, 10, 1, 6> int_part;
qi::uint_parser<uint32_t, 10, 1, 6> dec_part;
qi::rule<Iterator, uint64_t()> fixed_point =
(int_part >> "." >> dec_part )[qi::_val = qi::_1 * PRICE_MULT + qi::_2];
m_wire_msg = ( qi::as_string[*qi::alpha] >> "," // symbol
>> qi::ulong_long >> "," // symbol seq num
>> qi::ulong_long >> "," // order id
>> (fixed_point | qi::ulong_) >> ","
>> qi::uint_ >> "," // volume
>> qi::char_ >> "," // side
>> +qi::space >> "," // firm id
>> qi::ushort_ // parity split
Но он не может разобрать,
"AAPL,1192544,16044086616349464,157.47,100,S, ,0"
В частности, 157.47 иногда могут быть целыми числами, например. 157, поэтому я использую "(fixed_point | qi :: ulong _)".
Но синтаксический анализ не выполняется, чего я не совсем понимаю. В идеале также следует правильно разобрать следующее:
"AAPL,1192544,16044086616349464,157,100,S, ,0"
Любая помощь очень ценится!