Использование диапазона для ускорения последовательности FUSION

Я пытаюсь распечатать struct члены следующим образом:

#include <iostream>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/include/adapt_struct.hpp>

struct Node {
    int a = 4;
    double b = 2.2;
};

BOOST_FUSION_ADAPT_STRUCT(Node, a, b)

int main() {
    Node n;
    for (auto el: n) { // What do I put instead of n here?
        std::cout << el << std::endl;
    }
    return 0;
}

Это неправильно, конечно, так как n это просто struct, Как мне поставить для последовательности, что range for может работать вместо n?

1 ответ

Решение

Вы не можете использовать range-based for для этого случая. Это метапрограммирование, каждый член-итератор имеет свой собственный тип. Вы можете пройти с помощью fusion::for_eachили с рукописной структурой.

#include <iostream>
#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/include/for_each.hpp>

struct Node {
    int a = 4;
    int b = 2.2;
};

BOOST_FUSION_ADAPT_STRUCT(Node, a, b)

struct printer
{
   template<typename T>
   void operator () (const T& arg) const
   {
      std::cout << arg << std::endl;
   }
};

int main() {
    Node n;
    boost::fusion::for_each(n, printer());
    return 0;
}
Другие вопросы по тегам