我需要有一个类“LinkedSortedList”,也就是“排序列表”的孩子。 排序列表是一个模板类,所以我怎么能有一个孩子,是不是也是一个模板? 这里唯一的问题是,我需要有两个LinkedSortedList.h和.cpp,但显然你不能离开定义为一个.cpp的模板,他们必须与.H里面的方法/函数声明中定义的,所以我不会有LinkedSortedList.cpp ....难道只是我是一个完整的白痴?
Answer 1:
那么让我们假设你的LinkedSortedList
仅与类型工作int
(否则将需要一个模板,它的自我)。
首先,编译器需要知道SortedList<int>
必须在时间编译时sorted_list.cpp
(或徘徊无论模板实现)是可用的。 一旦它被编译链接器会发现它,并能够成功地联系起来。
因此,在linked_sorted_list.h
你会是这样的:
#include "sorted_list.h"
class LinkedSortedList : public SortedList<int> {
...
}
在sorted_list.cpp
,在结束时,你必须包括此行:
template class SortedList<int>;
或者(这是更好的办法),你可以把模板的定义与特殊extention文件(我倾向于使用.icc
)这是包含在sorted_list.h
:
template <class type>
class SortedList {
...
}
#include "sorted_list.icc"
现在,你可以编译在运行任何类型的排序列表。
Answer 2:
您只能从一个完全自定义类,而不是一个模板类派生。 这意味着代码
template <class C>
struct A{};
struct B : public A{};
是无效的。 然而,无论是
struct B : public A<int>{};
template <class C>
struct B : public A<C>{};
是有效的。 所以看起来你使用模板卡住。 如果你真的想有一个.cpp文件,你可以将你的代码放在.cpp,然后包括在您的.h文件(类定义后)。 我真的不推荐它,因为(IMO)它混淆代码。
文章来源: Must a child of a template class also be a template class?