我正在编写一个库,我需要创建一个迭代器接口,我希望尽可能地使它成为通用的。
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
,但显然有一些类型相关联。这是一个忽视?我是否错误地使用了输出迭代器?