我有哪些使用选择std::get<>()
and std::tie<>()
与增强结构一起?
例子:
我想使用基于范围的 for 循环在多个容器上进行迭代。我可以实施zip
函数,它使用boost::zip_iterator
.
#include <boost/iterator/zip_iterator.hpp>
#include <boost/range.hpp>
template <typename... TContainer>
auto zip(TContainer&... containers) -> boost::iterator_range<boost::zip_iterator<decltype(boost::make_tuple(std::begin(containers)...))>> {
auto zip_begin = boost::make_zip_iterator(boost::make_tuple(std::begin(containers)...));
auto zip_end = boost::make_zip_iterator(boost::make_tuple(std::end(containers)...));
return boost::make_iterator_range(zip_begin, zip_end);
}
现在我可以像这样使用它:
std:list<int> a;
std::vector<double> b;
...
for (auto t : zip(a, b)) {
// access elements by boost::get<0>(t), boost::get<1>(t)
// or use boost::tie(a_element, b_element)
}
当我调用其他需要的方法时会出现问题std::tuple
or std::pair
- 我必须转换),因为其余代码使用std::tuples
,或者当模板代码使用std::get<>()
and/or std::tie()
.
我发现一些补丁添加了std::tuple
支持zip_iterator
,但这些并没有应用在我的版本中(我使用Boost 1.54)。
我错过了什么吗?我有哪些选择zip_iterator
回来std::tuple
或使std::get
, std::tie
等可用于升压类型吗?
你有没有尝试过
#include <boost/iterator/zip_iterator.hpp>
#include <boost/range.hpp>
#include <tuple>
template <typename... TContainer> auto zip(TContainer&... containers) ->
boost::iterator_range<boost::zip_iterator<decltype(std::make_tuple(std::begin(containers)...))>> {
^^^
auto zip_begin = boost::make_zip_iterator(std::make_tuple(std::begin(containers)...));
^^^
auto zip_end = boost::make_zip_iterator(std::make_tuple(std::end(containers)...));
^^^
return boost::make_iterator_range(zip_begin, zip_end);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)