c++ - 模板类的 child 也必须是模板类吗?

标签 c++ visual-studio templates visual-c++ inheritance

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

相关文章:

c++ - 带有模板参数的 Lambda 函数,而不是函数参数

c++ - "function template has already been defined"使用 "std::enable_if_t"

c++ - 如何构建 64 位版本的 Crypto++ dll?

C++ 为什么我的示例程序不能创建输出文件?

c++ - 如何从命令行或其他应用程序打开桌面应用程序并将其置于最前面?

c# - 通过 Visual Studio C# 和 ASP.NET 在 Windows 上使用 Compass

c++ - 在构造函数中调用虚函数

c++ - 在 Visual Studio 中添加对 C++ 项目的引用会产生什么后果?

mysql - Visual Studio 错误 : Unable to load the stored procedure for editing

templates - Logstash模板不适合增加分片数量