c++ - 类型删除的 C++ 输出迭代器

标签 c++ boost stl type-erasure

如何从 std::insert_iteratorstd::back_insert_iterator 输出迭代器中删除类型?是否可以使用 boost any_iterator 来做到这一点?

#include <boost/range.hpp>
#include <boost/range/detail/any_iterator.hpp>
#include <vector>

typedef boost::range_detail::any_iterator<
    int, boost::incrementable_traversal_tag, int &, std::ptrdiff_t > It;

int main()
{
    std::vector<int> v;
    It outIt( v.begin() ); // compiles
    It inserter( std::back_inserter(v) ); // does not compile
    return 0;
}

最佳答案

any_iterator不是为与输出迭代器 一起使用而设计的,这就是back_insert_iterator是(或者,就此而言,输入迭代器)。

back_insert_iterator被定义为继承自 iterator<output_iterator_tag, void, void, void, void>即它的 value_type , reference_type , distance_typepointer_type都是void ,但是any_iterator期望能够通过其后备迭代器间接指向非空值。也许将它命名为 any_value_iterator 会更好;但它是一个 detail类模板。

关于c++ - 类型删除的 C++ 输出迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10794286/

相关文章:

c++ - 为什么我的列表插入函数不会生成新节点?

c++ - 使用静态类成员而不是私有(private)字段之间的速度差异是什么?

c++ - 来自继承类的 Makefile 错误

c++ - 指定boost::multi_array中所有数组的长度

c++ - Async_Read 函数的问题

c++ - STL 数据结构的输出参数与堆栈返回值的效率

c++ - 将仿函数存储在 STL 映射中并调用它们

c++ - C++中的复制构造函数

c++ - 在 Ubuntu 中编译 Boost SSL 失败

c++ - 为什么顺序容器同时具有 size_type 和 difference_type?