0

我正在编写一个库,我需要在其中创建一个迭代器接口,并且我想让它尽可能通用。

template<class OutputIterator>
void receive(OutputIterator oit){
    auto val = get_function< std::iterator_traits<OutputIterator>::value_type > (); // legacy function
    oit = val;
}

令我惊讶的是大多数输出​​迭代器value_typevoid. (void使代码无效,因为void无法声明变量)。

这里举两个例子:

http://en.cppreference.com/w/cpp/iterator/back_insert_iterator

http://en.cppreference.com/w/cpp/iterator/ostream_iterator

然而,在这两种情况下,都有一个明显的值类型相关联,我可以侵入每一个并“看到”有一个值类型。例如back_insert_iterator::container_type::value_type(但不能从 访问iterator_traits)。

为什么标准试图隐藏value_type输出迭代器?

也许正确的术语不是value_type,但显然有一些相关的类型。这是俯瞰吗?我是否错误地使用了输出迭代器?

4

0 回答 0