类型为T的模板容器及其指针类型

时间:2015-10-16 03:51:38

标签: c++ templates

在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?

0 个答案:

没有答案