我该如何填写???
template<class...Itrs> struct itr_category { typedef /* ??? */ type; };
所以这type
是最专业的,iterator_traits<Itrs>::iterator_category...
它支持所有' 操作,否则如果没有单个此类类别,则Itrs
失败(如)?enable_if<false>::type
最特iterator_category
化是指以下继承中最下降的类型 ( ):
struct input_iterator_tag { };
struct output_iterator_tag { };
struct forward_iterator_tag : public input_iterator_tag,
public output_iterator_tag { };
struct bidirectional_iterator_tag : public forward_iterator_tag { };
struct random_access_iterator_tag : public bidirectional_iterator_tag { };
因此,例如,类似的事情itr_category<InputIterator,OutputIterator,...>
会失败。
注意:这是一个不同于定义的层次结构std::iterator_traits
(参见 24.3 或http://en.cppreference.com/w/cpp/iterator/iterator_tags):这里forward_iterator_tag
派生自input_iterator_tag
andoutput_iterator_tag
而不仅仅是前者。这对应于例如 SGI 文档中描述的继承(参见http://www.sgi.com/tech/stl/Iterators.html)。如果它是相关的,请随意评论这种差异(顺便说一下,这是 zip 迭代器实现的一部分)。