我正在尝试按以下方式打印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
使用序列? 最佳答案
在这种情况下,您不能使用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;
}
关于c++ - 将范围用于增强FUSION序列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34197759/