Доступ к имени поля карты ускоренного слияния

Я пытался использовать некоторые элементы ускоренного слияния, чтобы написать обычную структуру c в файл. XML-файл кажется хорошим способом собрать данные и сделать их совместимыми с другими инструментами или редактировать вручную. Кажется, что он у меня почти есть, но чего-то фундаментального, похоже, не хватает. Я использую что-то очень похожее на то, что на странице быстрого запуска boost :: fusion: http://www.boost.org/doc/libs/1_54_0/libs/fusion/doc/html/fusion/quick_start.html. В качестве примечания я внимательно просмотрел здесь и в документации по boost, но, похоже, никто не обращается к имени поля.

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

Я хочу использовать его следующим образом:

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

В других случаях я определял структуру следующим образом, но все равно безуспешно:

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;

Я знаю, что сначала нет члена, но действительно кажется, что он должен быть, чтобы получить доступ к имени поля! Код, который у меня есть, отлично работает с x.second, но затем не выполняет то, что мне нужно, а именно получение имени поля. Как еще я мог бы это сделать? Спасибо!


person Chris    schedule 24.07.2013    source источник


Ответы (1)


person    schedule
comment
Поразительный кусок: / Я понятия не имел, что это существует - person sehe; 24.07.2013