规范的做法是仅继承自std::iterator<std::forward_iterator_tag, T>
。迭代器只有一个类别。
该标准对于同时也是前向迭代器的输出迭代器没有算法(或其他用途)。标准中输出迭代器的所有使用只需要单遍。
相反,该标准具有向前/双向/随机访问类别的可变与不可变迭代器的想法。所有需要通过迭代器写入的算法,并且需要比单遍更好的算法,也可以通过它们写入的相同迭代器来读取。这是std::remove
和std::sort
其他变异算法。
可变迭代器和不可变迭代器之间的区别不是由迭代器标签检测到的,它取决于赋值表达式是否格式正确。因此,例如,如果您将一个迭代器传递给std::sort
它是不可变的,那么该算法无论如何都不会编译,因此通常不需要输入迭代器也被标记为output_iterator_tag
. 所有需要的算法都OutputIterator
将只使用一个可变的ForwardIterator
,同样没有必要用它来标记output_iterator_tag
。
如果您的需求与标准算法的需求不同,那么我无法立即想到您的提案不适用于您的迭代器的原因。但它不会检测到可变的标准迭代器。例如std::deque<int>::iterator
和int*
有迭代器类别random_access_iterator_tag
,不是你的私人标签,也没有任何关系output_iterator_tag
。因此,您最好定义自己的特征类,而不是希望调整现有的特征类iterator_traits::iterator_category
以提供您想要的信息。