6

对于我的家庭作业,我必须创建一个链表,它必须是一个模板类。分配调用一个名为 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<int>::B<int> b;那样,有没有办法让 B 类自动与 A 属于同一类型?我的问题甚至有意义吗?换句话说,我可以做A<int>::B b;和 b 自动与 A 相同的类型吗?例如,永远不会有我会遇到的情况A<double>::B<int>;

4

2 回答 2

7

是的,B不要做模板。T1inB的定义仍然指的是 的模板参数A

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

  T1    _a;
}

现在,而不是A<int>::B<int>,它只是A<int>::B

List<int>::Link<double>无论如何都没有意义,所以它是一个模板是没有意义的。

于 2012-04-20T16:35:39.587 回答
1

I can't see why you think you need a template for your inner class. Have you tried declaring it as a non-template class? e.g.

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

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

(Also, while I realise it's just an example, I'd advise against writing classes with public data members)

于 2012-04-20T16:37:50.400 回答