我有一个像这样的链表结构:
template<class T>
class LinkedList {
private:
template<class U>
struct Node {
U data;
Node<U> *link;
};
Node<T> *head;
};
我理想的做法是将内部类定义与head
的声明合并,如:
// Is something like this possible?
template<class U>
struct Node {
U data;
Node<U> *link;
} head; // Put head right here somehow, while also specifying the type parameter.
因为创建Node<U>
结构的重点是定义head
。是否可以将这两者结合在一起?
答案 0 :(得分:2)
只需保留占位符T
并删除不必要的U
:
template<class T>
class LinkedList {
private:
struct Node {
T data;
Node *link;
};
Node *head;
};
答案 1 :(得分:1)
无论出于何种原因,您都可以将它们结合在一起。您只需删除多余的template<class U>
。
template<class T>
class LinkedList {
private:
struct Node {
T data;
Node* link;
}* head;
};
答案 2 :(得分:1)
我更喜欢你的第一个例子,但你不需要像你那样有两个模板参数。
template<class T>
class LinkedList {
private:
struct Node {
T data;
Node *link;
};
Node *head;
};
我认为这比你的第二个例子更清晰。例如,您现在可以在search
课程上编写insert
和LinkedList
个函数。在你的另一个例子中,他们必须是外部函数。