c++ - 在 boost 元组、zip_iterator 等上使用 std::get 和 std::tie

标签 c++ c++11 boost stl tuples

使用 std::get<>() 有哪些选择?和 std::tie<>()与 boost 结构一起?

例子: 我想使用基于范围的 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::tuplestd::pair - 我必须转换),因为其余代码使用 std::tuples ,或者当模板代码使用 std::get<>() 时和/或 std::tie() .

我发现了一些添加了 std::tuple 的补丁支持zip_iterator , 但这些不适用于我的版本(我使用 Boost 1.54)。

我错过了什么吗?我有什么选择来强制 zip_iterator返回 std::tuple或制作std::get , std::tie等可用于 boost 类型?

最佳答案

你试过吗

#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);
 }

关于c++ - 在 boost 元组、zip_iterator 等上使用 std::get 和 std::tie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22659287/

相关文章:

c# - C# 中具有未定义行为的代码

c++ - 使用自指针为类数据成员赋值时的区别

c++ - 实例化 std::mutex 时出现编译器错误

c++ - 继承和 friend : Safety mechanism?

c++ - vector::shrink_to_fit 是否允许重新分配?

c++ - 每帧在 shared_ptr 中动态分配图像

c++ - boost zip 迭代器和 std::sort

c++ - 如何正确重载从基类到继承的转换

c++ - 为什么 std::bind 和 boost::bind 在这个 Boost.Asio 教程中不能互换使用

c++ - 在 C++ 中处理许多 commnadline 选项