我需要有一个类“LinkedSortedList”,它是“SortedList”的子类。 SortedList 是一个模板类,那么我怎么能有一个不是模板的子类呢?这里唯一的问题是我需要同时拥有 LinkedSortedList.h 和 .cpp,但显然你不能将模板的定义保留在 .cpp 中,它们必须使用 .h 中的方法/函数声明来定义,所以我不会有 LinkedSortedList.cpp ....或者我只是个白痴?
最佳答案
好吧,假设您的 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>;
或者(这是更好的方法)您可以将模板的定义放入一个包含在 .icc
中的具有特殊扩展名的文件(我倾向于您使用 sorted_list.h
) :
template <class type>
class SortedList {
...
}
#include "sorted_list.icc"
现在您可以即时编译任何类型的排序列表。
关于c++ - 模板类的 child 也必须是模板类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082225/