2015-11-02 22 views
2

我想static_assert为我的函数提供的容器具有双向或更强的迭代器。 我知道如何做到这一点的唯一方法是比较它不是较弱的迭代器之一。C++在标准库中是否有用于比较迭代器类别的工具

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是bidi或更强?

回答

2

标签相互之间继承(所以随机继承双向,从继承的前进,从输入继承)。

因此,你可以做以下(仍是相当长的过程。)

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

0

五种可能的类型iterator_categoryinput_iterator_tagoutput_iterator_tagforward_iterator_tagbidirectional_iterator_tagrandom_access_iterator_tag

由于您已经使用了其中两个,我假设您可以使用其他两个。