Acessando o nome do campo do mapa de fusão de reforço

Eu tenho tentado usar algumas das coisas de fusão de impulso para escrever uma estrutura regular para o arquivo. Um arquivo XML parece ser uma boa maneira de capturar os dados e torná-los compatíveis com outras ferramentas ou manuais editáveis. Parece que eu quase tenho, mas algo fundamental parece estar faltando. Estou usando algo muito semelhante ao que está na página de início rápido do boost :: fusion:http://www.boost.org/doc/libs/1_54_0/libs/fusion/doc/html/fusion/quick_start.html. Como uma nota lateral eu olhei completamente aqui e na documentação do impulso, mas ninguém parece estar acessando o nome do campo.

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

Eu quero usá-lo da seguinte maneira:

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());

Outras vezes eu defini a estrutura como segue, mas ainda sem sorte:

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;

Eu sei que não há nenhum membro primeiro, mas realmente parece que deve haver para acessar o nome do campo! O código que eu tenho funciona bem com x.second mas não consegue o que eu preciso, que é para obter o nome do campo. De que outra forma eu poderia conseguir isso? Obrigado!

questionAnswers(1)

yourAnswerToTheQuestion