Zugriff auf den Feldnamen der Boost-Fusion-Karte

Ich habe versucht, einige der Boost-Fusions-Sachen zu verwenden, um eine reguläre Struktur in eine Datei zu schreiben. Eine XML-Datei scheint ein guter Weg zu sein, um die Daten zu erfassen und sie mit anderen Tools kompatibel oder von Hand bearbeitbar zu machen. Es scheint, als hätte ich es fast, aber etwas Grundlegendes scheint zu fehlen. Ich verwende etwas ziemlich Ähnliches wie die Schnellstartseite von boost :: fusion:http://www.boost.org/doc/libs/1_54_0/libs/fusion/doc/html/fusion/quick_start.html. Als Randnotiz habe ich mich hier und in der Dokumentation von Boost eingehend umgesehen, aber niemand scheint auf den Feldnamen zuzugreifen.

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

Ich möchte es wie folgt verwenden:

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

Andere Male habe ich die Struktur wie folgt definiert, aber immer noch kein Glück:

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;

Ich weiß, dass es zuerst kein Mitglied gibt, aber es scheint wirklich so, als ob es sein sollte, um auf den Feldnamen zuzugreifen! Der Code, den ich habe, funktioniert gut mit x.second, erreicht dann aber nicht das, was ich brauche, nämlich den Feldnamen zu erhalten. Wie könnte ich das sonst noch erreichen? Vielen Dank!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage