Использование диапазона для ускорения последовательности 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;
}