在C ++中搜索模板容器的迭代器实现示例让我感到困惑。这可能是由于我缺乏模板fu。我见过以下代码:
template<typename T>
struct iterator_traits
{
typedef T value_type;
typedef T& reference_type;
typedef T* iterator;
typedef const T* const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
};
template<typename T>
struct iterator_traits<T*>
{
typedef T* value_type;
typedef T*& reference_type;
typedef T** iterator;
typedef const T const_iterator;
typedef std::reverse_iterator<iterator> reverse_iterator;
};
我感到困惑的是T vs T *。两个结构都使用typename T进行模板化,但其中一个结构专门用于T *。这是否意味着编译器会尝试将T *(类型T的指针)与第二个iterator_traits而不是第一个匹配?如果我没有声明这样的模板特化,为什么我不能期望编译器使用第一个模板声明用T *替换T?