必须在模板类的子类也是一个模板类?(Must a child of a template class

2019-09-16 10:59发布

我需要有一个类“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?