Acceso al nombre del campo del mapa de fusión de boost

He estado tratando de usar algunas de las cosas de boost fusion para escribir una estructura regular en un archivo. Un archivo XML parece una buena manera de capturar los datos y hacerlos compatibles con otras herramientas o editables manualmente. Parece que casi lo tengo, pero algo fundamental parece faltar. Estoy usando algo muy similar a lo que está en la página de inicio rápido boost :: fusion:http://www.boost.org/doc/libs/1_54_0/libs/fusion/doc/html/fusion/quick_start.html. Como nota al margen, he mirado detenidamente aquí y en la documentación de boost, pero nadie parece estar accediendo al nombre del campo.

struct print_xml
{
    template <typename T>
    void operator()(T const& x) const
    {
        std::cout
            << '<' << x.first << '>'
            << x
            << "</" << x.first << '>'
            ;
    }
};

Quiero usarlo de la siguiente manera:

BOOST_FUSION_ADAPT_STRUCT(
    myStructType,
    (double, val1)
    (double, val2)
    (char, letter)
    (int, number)
    )    
myStructType saveMe = { 3.4, 5.6, 'g', 9};
for_each(saveMe, print_xml());

Otras veces definí la estructura de la siguiente manera, pero aún así no tuve suerte:

namespace fields{
    struct val1;
    struct val2;
    struct letter;
    struct number;
}

typedef fusion::map<
    fusion::pair<fields::val1, double>,
    fusion::pair<fields::val2, double>,
    fusion::pair<fields::letter, char>,
    fusion::pair<fields::number, int> > myStructType;

Sé que no hay ningún miembro primero, ¡pero realmente parece que debería haberlo para poder acceder al nombre del campo! El código que tengo funciona bien con x.second pero luego no cumple con lo que necesito, que es obtener el nombre del campo. ¿De qué otra manera podría lograr esto? ¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta