c++ - 如何设计嵌套类是同一类型的嵌套模板类

标签 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<int>::B b;吗?和 b 自动与 A 相同的类型?永远不会有我会 A<double>::B<int>; 的情况例如。

最佳答案

是的,只需要B不是模板。 T1B的定义仍然引用 A 的模板参数.

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

  T1    _a;
}

现在,而不是 A<int>::B<int> , 就是 A<int>::B .

List<int>::Link<double>无论如何都没有意义,所以作为模板没有意义。

关于c++ - 如何设计嵌套类是同一类型的嵌套模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10250023/

相关文章:

c++ - 为什么我必须通过this指针访问模板基类成员?

c++ - 如何在 C++ 中创建 map<string, class::method> 并能够搜索函数并调用它?

python - "The set of methods, however, is fixed when the class is first defined"是真的吗?

java - 在没有第三方库的情况下从Python启动JVM?

python - 删除日期时间函数中的时间?

c++ - 为什么重载的新运算符是隐式静态的,并且构造对象不需要范围解析

c++ - 给定类型的转换运算符与构造函数。哪个更好?

c++ - 无法弄清楚如何通过仅使用类的函数删除整个链表

c++ - 有没有办法部分实例化一个c++模板

c++ - 使用默认模板参数