【发布时间】:2014-10-07 01:36:04
【问题描述】:
我正在尝试编写
is_iterator<T>类型特征。当T是迭代器类型时is_iterator<T>::value == true否则是is_iterator<T>::value == false。到目前为止我尝试了什么:
template <class, class Enable = void>
struct is_iterator : std::false_type {};
template <typename T>
struct is_iterator<T, typename std::enable_if<std::is_pointer<typename
std::iterator_traits<T>::pointer>::value>::type> : std::true_type {};
问:有没有比上面显示的更合适的方法来定义is_iterator 类型特征?
【问题讨论】:
-
为什么这需要是一个完整的类或结构?为什么没有
bool is_iterator(T)? -
@Josh 在 SFINAE 中使用。
-
您可以检查迭代器概念的所有要求:en.cppreference.com/w/cpp/concept/Iterator。
-
注: pre-DR 2408
iterator_traits对 SFINAE 不友好,将其实例化为非迭代器类型是一个硬错误,而不是替换失败 -
一个类型是一个迭代器,如果它是一个输入迭代器或一个输出迭代器。定义
is_input_iterator<T>和is_output_iterator<T>留给读者作为练习。 :-)
标签: c++ c++11 iterator typetraits c++14