其他分享
首页 > 其他分享> > c-在Boost Fusion :: vector上迭代

c-在Boost Fusion :: vector上迭代

作者:互联网

我正在尝试使用以下方法迭代boost :: fusion矢量

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向量,每个迭代器的类型可能与前一个不同(通常是).我猜这就是为什么您的代码中没有它= 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,iterator,boost-fusion
来源: https://codeday.me/bug/20191013/1908664.html