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

时间:2013-10-15 15:09:54

标签: c++

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

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。是否可以将这两者结合在一起?

3 个答案:

答案 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课程上编写insertLinkedList个函数。在你的另一个例子中,他们必须是外部函数。