1

次のようなリンクリスト構造があります。

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です。この2つを結びつけることは可能ですか?

4

3 に答える 3

2

プレースホルダーを保持Tし、不要なものを削除するだけUです:

template<class T>
class LinkedList {
private:

    struct Node {
        T data;
        Node *link;
    };

    Node *head;
};
于 2013-10-15T15:13:26.733 に答える
1

どんな理由であれ、一緒に参加することができます。冗長な を削除するだけtemplate<class U>です。

template<class T>
class LinkedList {
private:
    struct Node {
        T data;
        Node* link;
    }* head;
};
于 2013-10-15T15:13:04.687 に答える
1

私はあなたの最初の例を好みますが、そこにあるような 2 つのテンプレート パラメーターは必要ありません。

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

    Node *head;
};

これは2番目の例よりもずっときれいだと思います。たとえば、クラスsearchinsert関数を記述できるようになりました。LinkedListあなたの他の例では、それらは外部関数でなければなりません。

于 2013-10-15T15:13:22.060 に答える