C++ 在标准库中是否有用于比较迭代器类别的工具
Does C++ have facilities in standard library for comparing iterator categories
我希望 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 是比迪还是更强?
标签相互继承(所以random继承自bidirectional,bidirectional继承forward,input继承input)。
因此,您可以执行以下操作(当然仍然相当长..)
static_assert(std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename C1::iterator>::iterator_category>::value, "");
iterator_category
的五种可能类型是 input_iterator_tag
、output_iterator_tag
、forward_iterator_tag
、bidirectional_iterator_tag
和 random_access_iterator_tag
。
既然你已经在使用其中两个,我想你可以使用其他的。
我希望 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 是比迪还是更强?
标签相互继承(所以random继承自bidirectional,bidirectional继承forward,input继承input)。
因此,您可以执行以下操作(当然仍然相当长..)
static_assert(std::is_base_of<std::bidirectional_iterator_tag, typename std::iterator_traits<typename C1::iterator>::iterator_category>::value, "");
iterator_category
的五种可能类型是 input_iterator_tag
、output_iterator_tag
、forward_iterator_tag
、bidirectional_iterator_tag
和 random_access_iterator_tag
。
既然你已经在使用其中两个,我想你可以使用其他的。