【发布时间】:2020-01-28 20:42:50
【问题描述】:
假设一个名为 Queue 的类模板带有一个嵌套类 Node(不是类模板):
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();
};
我可以这样做:
template<typename T>
void Queue<T>::enqueue(const T& elem) {
Node* temp = new Node(elem);
}
它可以编译,但为什么声明 Node 不需要更多信息? (如Queue::Node)
阅读Templates and nested classes/structures后,所有这3个也可以工作并编译:
template<typename T>
void Queue<T>::enqueue(const T& elem) {
typename LLQueue<Object>::Node* temp1 = new Node(elem);
LLQueue<Object>::Node* temp2;
LLQueue::Node* temp3;
}
为什么所有版本都有效?在类模板中使用嵌套类时首选哪个?
【问题讨论】:
标签: c++ class templates typename