Компилятор - его нет в поддерживаемом наборе для Spirit X3, AFAIK. X3 все еще экспериментальный
ебника Boost Spirit X3:
Сначала давайте создадим структуру, представляющую сотрудника:
namespace client { namespace ast
{
struct employee
{
int age;
std::string surname;
std::string forename;
double salary;
};
}}
Затем нам нужно рассказать Boost.Fusion о нашей структуре сотрудников, чтобы сделать ее первоклассным гражданином, способным использовать грамматику.
BOOST_FUSION_ADAPT_STRUCT(
client::ast::employee,
(int, age)
(std::string, surname)
(std::string, forename)
(double, salary)
)`
[...] По мнению Fusion, структура - это просто форма кортежа. Вы можете адаптировать любую структуру, чтобы она полностью соответствовала фьюжн-кортежу. [...] Применяя наши правила свертывания выше, RHS имеет атрибут:fusion::vector<int, std::string, std::string, double>
Сотрудник struct совместим с fusion :: vector. Таким образом, RHS при запуске использует атрибут start (сотрудник struct) на месте, когда он выполняет свою работу.
Если я хорошо понял, эта логика сильно зависит от порядка атрибутов.
Теперь я нахожусь в ситуации, когда мне нужно разобрать что-то вроде
Layer "L1" {
number = 23
color = green
visible = true
}
в структуру
struct LayerInfo
{
std::string layerName;
int layerNumber;
std::string color;
bool visible;
}
Проблема в,порядок свойств слоя может меняться, что противоречит логике, приведенной выше.
Какой правильный способ разобрать в структуру, как это? Нужно ли обязательно использовать семантические действия?