如何设计嵌套类具有相同类型的嵌套模板类

时间:2012-04-20 16:32:26

标签: c++ class templates

对于我的家庭作业,我必须创建一个链表,它必须是一个模板类。赋值调用一个名为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}自动执行与{A}相同的类型吗?我永远不会有A<int>::B b;的情况。

2 个答案:

答案 0 :(得分:6)

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

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

  T1    _a;
}

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

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

答案 1 :(得分:1)

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

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

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

(另外,虽然我意识到这只是一个例子,但我建议不要用公共数据成员编写课程)

相关问题