对于我的家庭作业,我必须创建一个链表,它必须是一个模板类。赋值调用一个名为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;
的情况。
答案 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;
};
(另外,虽然我意识到这只是一个例子,但我建议不要用公共数据成员编写课程)