2017-08-29 8 views
3

ネストされたクラスの正しいテンプレートを書くための正しい構文を理解できません。私は、外部クラスの各要素を表現するクラスを持つようにしたいので、私は外側の内側に隠されるために内部クラスを持っているしたいのですが、このネストされたクラスC++の正しいテンプレート

template <typename T> 
class list { 
private: 
    class node { 
    public: 
     T value; 
     node(); 
     ~node(); 
    }; 

public: 
    node<T> *H; 
    list(); 
    ~list(); 
}; 

ような何かをしたいと思います。これは可能ですか?あるいは私は別のアプローチをとるべきですか?

+1

内部クラスもテンプレートにしたいですか? –

+1

'node'はテンプレートではありません。 'node * H;'はうまく動作するはずです。 – nwp

+0

パブリックメンバーだけのクラスがある場合は、全く関係のないノートでは、代わりに 'struct'を使うことを検討してください。 'class'と' struct'はちょうど同じですが、それは異なったデフォルトの可視性です( 'class'では' private'、 'struct'では' public')。 –

答えて

1

最終的には、このでした。

template <typename T> 
class list { 
private: 
    template <typename U> 
    class node { 
    public: 
     U value; 
     node(); 
     ~node(); 
    }; 

public: 
    node<T> *H; 
    list(); 
    ~list(); 
}; 

この回答を最初に投稿したユーザーに感謝します。

7

(それはテンプレートクラスとして宣言されていないため)あなたが内部クラス用のテンプレートパラメータを指定する必要はありません。私が探していたもの

template <typename T> 
class list { 
private: 

    class node { 
    public: 
     T value; 
     node(); 
     ~node(); 
    }; 

public: 
    node *H; // <<<<<< 
    list(); 
    ~list(); 
}; 
+0

私は、 'private'ネストされたクラスの' public'メンバを持つことは良い考えではないことに対処すべきだと思います。 – muXXmit2X

+0

@ muXXmit2Xクライアントは 'auto'を使ってアクセスできます。 – user0042

+0

私はそれをテンプレートクラスにしたいですが、私は別のテンプレートを入れる必要があることを知らなかった。私が得た最初の答えは正しいものでしたが、今は去ったようです – fedemengo

関連する問題