带 <T> 或不带 (C++) 的类模板

csg*_*guy 6 c++ templates

根据为什么在函数返回类型中不允许参数推导?

在模板类成员函数中指定返回类型时,我们必须具体,例如:“类型 std::vector不是类型,std::vector<int>是”。

那么为什么这两个例子都能编译呢?如果我不在<T>第一个示例中包含 the ,它甚至不应该被视为一种类型,对吗?

template<typename T>
Queue<T>::Queue(const Queue& st) {}

template<typename T>
Queue<T>::Queue(const Queue<T>& st) {}
Run Code Online (Sandbox Code Playgroud)

鉴于此模板类

template<typename T>
class Queue {
   private:

    struct Node {
        Node (T value) : value(value), next(nullptr) {}
        Node (T value, Node* next) : value(value), next(next) {}
        T value;
        Node* next;
    };

    Node* head;
    size_t sz;
    void cleanList();

  public:
    Queue();

    Queue(const Queue& st);
    Queue& operator=(const Queue& st);

    ~Queue();

    size_t size() const noexcept;
    bool isEmpty() const noexcept;

    T& front();
    const Tt& front() const;

    void enqueue(const T& elem);

    void dequeue();
};
Run Code Online (Sandbox Code Playgroud)

Nat*_*ica 8

这些示例工作的原因是因为注入了类名。当你有

template<typename T>
some_type<T> some_type<T>::some_func(some_type)
Run Code Online (Sandbox Code Playgroud)

返回类型不在类的范围内,因此您需要提供模板参数。在函数参数中,您在类的范围内,并且在类的范围内some_type作为名称注入,some_type<T>因此您不需要使用some_type<T>.