在模板类成员函数中指定返回类型时,我们必须具体,例如:“类型 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)
这些示例工作的原因是因为注入了类名。当你有
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>
.