使用模板类定义内联声明变量

Declare variable inline with template class definition

本文关键字:声明 变量 定义      更新时间:2023-10-16

我有一个这样的链表结构:

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 .是否有可能将这两者联系在一起?

只需保持占位符T并删除不必要的U

template<class T>
class LinkedList {
private:
    struct Node {
        T data;
        Node *link;
    };
    Node *head;
};

无论出于何种原因,您都可以将它们连接在一起。您只需要删除多余的template<class U>即可。

template<class T>
class LinkedList {
private:
    struct Node {
        T data;
        Node* link;
    }* head;
};

我更喜欢你的第一个例子,但你不需要像那里那样的两个模板参数。

template<class T>
class LinkedList {
private:
    struct Node {
        T data;
        Node *link;
    };
    Node *head;
};

我认为这比你的第二个例子要干净得多。例如,您现在可以在LinkedList类上编写searchinsert函数。在您的另一个示例中,它们必须是外部函数。