我正在尝试使用以下方法迭代 boost::fusion vector :
typedef typename fusion::result_of::begin<T>::type t_iter;
std::cout << distance(begin(t), end(t)) << std::endl;
for(t_iter it = begin(t); it != end(t); next(it)){
std::cout<<deref(it)<<std::endl;
}
distance cout 语句给了我一个有限的长度 (2),但是循环似乎无限期地运行。
非常感谢任何建议!
最佳答案
您不能像那样迭代 Fusion vector ,每个迭代器的类型可能与前一个不同(通常是)。我想这就是为什么您的代码中没有 it = next(it)
的原因,它会产生编译错误。
您可以为此使用 boost::fusion::for_each
,以及将每个元素打印到标准输出的函数对象:
struct print
{
template< typename T >
void operator()( T& v ) const
{
std::cout << v;
}
};
...
boost::fusion::for_each( t, print() );
关于c++ - 迭代 Boost fusion::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13094535/