【问题标题】:Correct template for nested class C++嵌套类 C++ 的正确模板
【发布时间】:2018-02-06 22:42:19
【问题描述】:

我无法找出正确的语法来为嵌套类编写正确的模板。我想做这样的事情

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

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

我想要一个类来表示外部类的每个元素,所以我想让内部类隐藏在外部类中。这可能吗?还是我应该使用不同的方法?

【问题讨论】:

  • 你想让内部类也成为模板吗?
  • node 不是模板。 node *H; 应该可以正常工作。
  • 在一个完全不相关的注释中,如果你有一个只有公共成员的类,那么考虑改用structclassstruct 是一样的,只是默认可见性不同(private 代表 classpublic 代表 struct)。
  • 是的node应该是一个模板类,但是类的类型应该是list声明时指定的类型。如果我写 list 我希望节点是 int 类型。
  • publicprivate 嵌套类的成员?当有人试图在list&lt;&gt; 之外访问H 时,您会遇到问题

标签: c++ class templates inner-classes


【解决方案1】:

最终我要找的是这个。

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

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

【讨论】:

  • node 没有理由成为类模板。正如其他答案所说,您可以使用Tnode 中创建成员。
  • @JensB 那么我在 OP 中做了什么?
  • 您尝试使用模板参数 (node&lt;T&gt;) 声明 node 指针,即使您没有将 node 声明为类模板。只需让node 成为普通类并将其成员之一声明为T。像魅力一样工作。
【解决方案2】:

你不需要为内部类指定模板参数(因为它没有被声明为模板类):

template <typename T>
class list {
private:

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

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

【讨论】:

  • 我认为您应该指出在 private 嵌套类中拥有 public 成员不是一个好主意。
  • @muXXmit2X 客户端可以使用auto 访问它。
  • 我希望它成为一个模板类,但我不知道我需要放置另一个模板。我得到的第一个答案是正确的,但现在它似乎消失了
  • @user0042 哦不知道。对于像我这样不知情的人here 是一个使用auto 关键字访问H 的示例。
猜你喜欢
  • 1970-01-01
  • 2018-11-08
  • 2011-05-04
  • 2017-02-05
  • 2018-04-22
  • 2019-02-25
  • 2015-07-29
  • 1970-01-01
  • 2020-12-16
相关资源
最近更新 更多