Boost Spirit x3: analizar en estructuras

Del tutorial Boost Spirit X3:

Primero, creemos una estructura que represente a un empleado:

namespace client { namespace ast
{
   struct employee
   {
       int age;
       std::string surname;
       std::string forename;
       double salary;
   };
}}

Luego, debemos contarle a Boost.Fusion sobre la estructura de nuestros empleados para convertirlo en un ciudadano de fusión de primera clase que la gramática pueda utilizar.

BOOST_FUSION_ADAPT_STRUCT(
    client::ast::employee,
    (int, age)
    (std::string, surname)
    (std::string, forename)
    (double, salary)
)`

[...] En opinión de la fusión, una estructura es solo una forma de tupla. Puede adaptar cualquier estructura para que sea una tupla de fusión totalmente conforme. [...] Aplicando nuestras reglas de colapso anteriores, el RHS tiene un atributo de:fusion::vector<int, std::string, std::string, double> La estructura del empleado ES compatible con fusion :: vector. Entonces, el RHS de inicio usa el atributo de inicio (un empleado de estructura) in situ cuando hace su trabajo.

Si entendí bien, esta lógica depende en gran medida del orden de los atributos.

Ahora, estoy en una situación en la que necesito analizar algo como

Layer "L1" {
    number = 23
    color = green
    visible = true
}

en una estructura

struct LayerInfo
{
    std::string layerName;
    int layerNumber;
    std::string color;
    bool visible;
}

El problema es,el orden de las propiedades de la capa puede cambiar, que está en oposición con la lógica vista anteriormente.

¿Cuál es la forma correcta de analizar una estructura como esta? ¿Necesito necesariamente usar acciones semánticas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta