c++ - 我应该总是在头文件中定义我的整个模板类吗?

标签 c++ templates

出于某种原因,当您将模板类(即声明为 template <typename T> class Thing 的类)拆分为 .h 时,C++ 似乎不喜欢它。和一个 .cpp文件,就像处理任何其他类一样。

那是不是写模板类的时候就直接写在头文件里就可以了? C++ 程序员在这些情况下会做什么?

编辑:我知道除了将其全部写入 .h 之外还有其他选择。文件。但最好的选择是什么?或者最常见的选项是什么?

最佳答案

将模板的定义拆分到另一个文件中很流行。它是如此受欢迎,甚至可能是最常见的做法,但我对此并不乐观。

认为这是不好的做法(与将定义放在同一个标​​头中相反),原因如下。

我在编写代码时的优先事项是(最重要的):

  1. 正确性。
  2. 运行时性能。
  3. 编译时性能。
  4. 可维护性/易于阅读。
  5. 易于编写。

只要模板定义在同一 header 中,或者在 header 包含的另一个文件中,第一优先级正确性就不会受到任何影响。

第二优先级的运行时性能不会受到丝毫影响。

第三优先级 编译时性能 将定义放在单独的文件中会受到负面影响。多少值得商榷。但是,编译器不可能编译 X 数量的代码并打开/关闭两个文件,就像编译完全相同的代码而只打开/关闭一个文件一样快。我的一个 friend 是一位优秀的编译器作者,他曾经告诉我,我能要求他的编译器做的最慢的事情就是打开一个文件。这是在我们进行像今天这样多的编译时计算之前,但仍然...

第四优先级可维护性/易于阅读是相当主观的。但在我看来,单独的文件对这个优先级是有负面影响的。当我阅读代码时,如果所有代码都在一个文件中,通常对我来说更容易理解。当文件的名称或位置不明显时,我不得不去寻找文件时,我真的很生气。当定义被分成许多文件时,我会更加恼火。为了我的钱,一个文件优化了这个优先级。

第五优先级易写也是比较主观的。我认为这两种方式都没有太大优势。将所有内容放在一个文件中会稍微容易一些。但是创建一个新文件当然不难。在这个优先级上,我给“一个文件方法”一个非常小的优势。

所以总而言之,在我的五个优先级中,最重要的两个,这个决定绝对没有影响,并且单独的文件对 3 个较低优先级的负面影响很小。在 3 个较低的优先级中,编译时性能客观上受到负面影响,这是其中最重要的。诚然,两个最低优先级对于它们是否受到正面或负面影响是主观的。

我认为将模板定义放在单独的 header 中没有任何好处,而且成本很小。

关于c++ - 我应该总是在头文件中定义我的整个模板类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26197647/

相关文章:

c++ - 未定义对静态成员中类静态成员的引用

C++ - Unresolved external 错误

c++ - 模板和重载 istream

C++ 模板交换函数

c++ - 声明如何与自身冲突?

c++ - 如何通过函数指针调用不同签名的C++函数

c++ - 为什么不需要导出模板类?

javascript - VueJS - DOM 模板解析和自定义元素

c++ - 堆上是否分配了变量?

c++ - ==<> 运算符的含义是什么?