我正在编写一个库,我需要在其中创建一个迭代器接口,并且我想让它尽可能通用。
template<class OutputIterator>
void receive(OutputIterator oit){
auto val = get_function< std::iterator_traits<OutputIterator>::value_type > (); // legacy function
oit = val;
}
令我惊讶的是大多数输出迭代器value_type
是void
. (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
,但显然有一些相关的类型。这是俯瞰吗?我是否错误地使用了输出迭代器?