【问题标题】:How to design nested template classes where nested classes are of the same type如何设计嵌套类为同一类型的嵌套模板类
【发布时间】:2012-04-20 16:32:26
【问题描述】:

对于我的家庭作业,我必须创建一个链表,它必须是一个模板类。分配调用一个名为 List 的模板类和另一个名为 Link 的嵌套模板类。

方法应该在类定义之外定义。

我首先创建了一个简单版本的作业,它正在运行,但我觉得我的设计有错误。

#include <iostream>
using namespace std;

template <class T1>
class A
{
public:
  template <class T2>
  class B;

  T1    _a;
};

template <class T1>
template <class T2>
class A<T1>::B
{
public:
  T2 _b;
};

int main()
{
  A<int> a;
  a._a = 5;

  A<int>::B<int> b;
  b._b = 10;

  cout << a._a << " " << b._b << "\n";


  return 0;
}

我的主要问题是,由于嵌套类将具有相同的类型,正如您从语句 A&lt;int&gt;::B&lt;int&gt; b; 中看到的那样,有没有办法让 B 类自动与 A 具有相同的类型?我的问题甚至有意义吗?换句话说,我可以将A&lt;int&gt;::B b; 和 b 自动与 A 类型相同吗?例如,我永远不会有A&lt;double&gt;::B&lt;int&gt;; 的情况。

【问题讨论】:

    标签: c++ class templates


    【解决方案1】:

    是的,只是让B 不是模板。在B的定义中T1仍然引用A的模板参数。

    template <class T1>
    class A
    {
    public:
      class B;
    
      T1    _a;
    }
    

    现在,不是A&lt;int&gt;::B&lt;int&gt;,而是简单的A&lt;int&gt;::B

    List&lt;int&gt;::Link&lt;double&gt; 无论如何都没有意义,所以作为模板没有意义。

    【讨论】:

    • 好的,我想这会起作用,那时我的语法一定有问题,因为我不断收到错误。我会再试一次。
    【解决方案2】:

    我不明白为什么你认为你的内部类需要一个模板。您是否尝试过将其声明为非模板类​​?例如

    template <class T1>
    class A
    {
    public:
      class B;
    private:    
      T1    _a;
    };
    
    template <class T1>
    class A<T1>::B
    {
      T1 _b;
    };
    

    (另外,虽然我知道这只是一个示例,但我建议不要编写具有 public 数据成员的类)

    【讨论】:

    • 我认为没有必要,我只是在犯语法错误,我认为是因为我无法编译程序。我能够从您的示例代码中修复它。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2016-05-07
    • 2011-03-26
    • 1970-01-01
    相关资源
    最近更新 更多