繁体   English   中英

向量struct的打印成员

[英]print member of struct of a vector

我尝试仅从我的结构(struct pnt)的向量中打印一个结构成员。 通过显示以下内容让我很清楚:

struct pnt {
  char _name;
  int _type;
  bool _aux;
  };

boost::copy(pntVec.begin(),pntVec.end()|
boost::adaptors::transformed(bind(&pnt::_type, _1)), 
std::ostream_iterator<int>(std::cout, "\n"));

但我得到一个错误。 如果您能帮助我找到原因,我将不胜感激。

错误

 error: no type named ‘type’ in ‘boost::mpl::eval_if_c<true, boost::range_const_iterator<__gnu_cxx::__normal_iterator<int*, std::vector<int> >, void>, boost::range_mutable_iterator<const __gnu_cxx::__normal_iterator<int*, std::vector<int> >, void> >::f_ {aka struct boost::range_const_iterator<__gnu_cxx::__normal_iterator<int*, std::vector<int> >, void>}’

注意 :我可以使用C ++ 98,提升v.1.56

Boost Adapter适应范围 ,而不是单个迭代器 类似地, boost::copy算法需要两个参数,其中第一个是范围 ,第二个是输出迭代器 话虽如此,用于从range提取单个数据成员并将其复制到输出迭代器的正确语法是:

boost::copy(pntVec | boost::adaptors::transformed(bind(&pnt::_type, _1))
          , std::ostream_iterator<int>(std::cout, "\n"));

另外,由于Phoenix可以取代Boost Bind + Boost Lambda,因此可以使用Boost Phoenix:

boost::for_each(pntVec, std::cout << bind(&pnt::_type, arg1) << "\n");

甚至没有bind ,如果您不用担心一些奥秘的语法:

boost::for_each(v, std::cout << (arg1->*&pnt::_type) << "\n");

这很富有表现力。 在Coliru上实时观看


另外请注意,还有的mem_fn在升压/ C ++ 11: pntVec | transformed(mem_fn(&pnt::_type)) pntVec | transformed(mem_fn(&pnt::_type))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM