C ++是否在标准库中具有用于比较迭代器类别的工具

时间:2015-11-02 09:09:59

标签: c++ template-meta-programming

我想static_assert提供给我的函数的容器有双向或更强的迭代器。 我知道如何做到这一点的唯一方法是比较它不是较弱的迭代器之一。

    static_assert(! std::is_same<typename std::iterator_traits<typename C1::iterator>::iterator_category, std::input_iterator_tag>::value,"");
    static_assert(!std::is_same<typename std::iterator_traits<typename C1::iterator>::iterator_category, std::forward_iterator_tag>::value, "");
//TODO:add check it is not output iter....

任何方式说iterator_category都是比迪或更强?

2 个答案:

答案 0 :(得分:2)

标签彼此继承(因此随机从双向继承,继承自forward,从输入继承)。

因此,您可以执行以下操作(当然还是相当长的时间......)

static_assert(std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename C1::iterator>::iterator_category>::value, "");

答案 1 :(得分:0)

五种可能的iterator_category类型有input_iterator_tagoutput_iterator_tagforward_iterator_tagbidirectional_iterator_tagrandom_access_iterator_tag

由于您已经使用其中两种,我认为您可以使用其他的。