有没有办法检查作为参数传递给函数的迭代器是反向迭代器?是否有任何可用的迭代器特性函数可以使用?
有没有办法检查作为参数传递给函数的迭代器是反向迭代器?是否有任何可用的迭代器特性函数可以使用?
使用部分特化轻而易举:
#include <iterator>
#include <type_traits>
template<typename Iter>
struct is_reverse_iterator
: std::false_type { };
template<typename Iter>
struct is_reverse_iterator<std::reverse_iterator<Iter>>
: std::true_type { };
虽然如下所指出,这无法处理“反向-反向”迭代器的情况(在我看来不太可能)。Bathsheba的答案中稍微不那么琐碎的版本可以正确地处理该情况。
std::reverse_iterator<std::reverse_iterator<Iter>>
。另一个答案可以。 - LogicStuffreverse_iterator
的实例化类型)或者不将其视为一个(因为它在上下文中迭代“向前”,无论这意味着什么)。 - Steve Jessop我在生产中使用的一些代码:
#include <iterator>
#include <type_traits>
template<typename I>
struct is_reverse_iterator : std::false_type
{
};
template<typename I>
struct is_reverse_iterator<std::reverse_iterator<I>>
: std::integral_constant<bool, !is_reverse_iterator<I>::value>
{
};
std::integral_constant
和std::false_type
。 - ubuntugod
std::iterator_traits
可以使用。 - Some programmer dude