Я пытаюсь разобрать следующие строки, например:
pc_us_ru_2_ua_3_inet(evdev)_capslock(grouplock)
В следующую структуру:
struct LayoutSymbols
{
std::vector<std::string> layouts; // Will contain {us,ru,ua} for example above
std::vector<std::string> options; // Will contain {inet(evdev), capslock(grouplock)} for example above
};
BOOST_FUSION_ADAPT_STRUCT(LayoutSymbols,
layouts, options
)
Вот мой код:
std::string test = "pc_us_ru_2_ua_3_inet(evdev)_capslock(grouplock)";
LayoutSymbols layoutSymbols;
x3::phrase_parse(test.begin(), test.end(), "pc_" >> (+x3::char_("a-z") >> -('_' >> +x3::char_("a-z") >> '_' >> x3::omit[x3::alnum]))
>> '_' >> (+x3::char_("a-z") >> x3::char_('(') >> +x3::char_("a-z") >> x3::char_(')')) % '_',
x3::space, layoutSymbols);
Но у меня есть ошибка компиляции:
/usr/include/boost/spirit/home/x3/operator/detail/sequence.hpp:148: error: static assertion failed: Size of the passed attribute is less than expected.
148 | actual_size >= expected_size
| ~~~~~~~~~~~~^~~~~~~~~~~~~~~~
Можно ли указать >>
для следующего: +x3::char_("a-z") >> '_' >> -(+x3::char_("a-z") >> '_' >> x3::alnum
для чтения любого элемента в вектор LayoutSymbols
вместо чтения в него членов?