我不确定你为什么想要value_type
一个 OutputIterator,因为没有办法从 Output Iterator 中提取一个值。但是,三个插入迭代器适配器都定义value_type
为 bevoid
并提供一个类型成员,因此如果of变成了container_type
,您可以回退到value_type
of 。T::container_type
value_type
T
void
(通过“value_type
的”我真的是指std::iterator_traits<T::container_type>::value_type
和std::iterator_traits<T>::value_type
。)
或者你不能尝试使用输出迭代器,就好像它们有值一样:)
编辑:SFINAE 不是必需的:(即使没有 C++11 的优点)
template<typename U, typename T> struct helper {typedef U type;};
// ostream*_iterator handling courtesy Drew Dormann
template <typename T, typename charT, typename traits>
struct helper<void, std::ostream_iterator<T, charT, traits> > {typedef T type;};
template <typename charT, typename traits>
struct helper<void, std::ostreambuf_iterator<charT, traits> > {typedef charT type;};
// std::raw_storage_iterator still needs an override
// as well as any non-standard output iterators which don't define a container_type.
template<typename T> struct helper<void, T>
{typedef typename std::iterator_traits<typename T::container_type>::value_type type;};
typedef<typename It> struct my_value_type
: public helper<typename std::iterator_traits<It>::value_type, It> {};