类/功能模板的正确代码结构?

时间:2018-10-27 10:15:06

标签: c++ templates function-templates code-structure

假设我们有一个带有函数模板的类。

具有类定义的头文件Sort.hpp:

ionic serve

具有功能实现的源文件Sort.cpp:

#ifndef TEST_SORT_HPP
#define TEST_SORT_HPP

#include <vector>
using namespace std;

class Sort {
public:
    template <typename T>
    static void mergeSort(vector<T>& arr);
};

#endif //TEST_SORT_HPP

此结构不适用于reasons stated in this answer。如参考答案中所述,如果我不想将实现直接包含在头文件中,则有多种方法可以解决此问题。

但是,这些解决方案对我不起作用:

  • 如果在头文件的末尾(在#include "Sort.hpp" template <typename T> void Sort::mergeSort(vector<T> &arr) { // the implementation is irrelevant at the moment } 之前)添加#include "Sort.cpp",则会收到错误消息:#endif

  • 我事先不知道排序使用的所有类型,因此无法在源文件的末尾明确声明它们。

  • 我也无法从Sort.cpp文件中删除redefinition of 'static void Sort::mergeSort(std::vector<T>&)',因为那样#include "Sort.hpp"

实际上是如何做到的?

在以下情况下将代码组织到文件中的最佳做法是什么?

  • ...正在创建具有未知类型(无限制)的类模板吗?

  • ...在知道将使用哪种特定类型的地方创建类模板?

0 个答案:

没有答案