2017-08-29 151 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 * H;'应该可以正常工作。 – nwp

+0

在一个完全不相关的说明中,如果您只有一个只有公共成员的类,请考虑使用'struct'来代替。 'class'和'struct'是一样的,只是默认的可见性不同(''private'''''''''''''''''''''公共'')。 –

回答

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