【问题标题】:Template functions in cpp [duplicate]cpp中的模板函数[重复]
【发布时间】:2017-04-03 00:22:15
【问题描述】:

我在 Visual Studio 2015 中编写 C++ 代码。我有名为 superpixel.h 和 superpixel.cpp 的文件。我想为某些功能使用模板,但我读到我无法在 cpp 文件中定义模板。我不想在头文件中定义模板,因为它只会让我的代码与头文件和 cpp 文件中的定义混淆。

有解决办法吗?我是否必须将所有 cpp 文件切换到 hpp ?

【问题讨论】:

  • 有些人会创建一个包含在 .h 文件底部的 .inl(内联)文件。该文件将包含所有模板方法。
  • 我在第一次学习模板的时候也对这个有点恼火。这听起来有点难以置信,但我做了一些谷歌搜索,在标题中执行似乎很标准,所以我接受了。

标签: c++


【解决方案1】:

任何使用模板的东西都需要访问模板,这意味着它必须被包含在内。我所看到的大部分内容是将整个定义放入标题中,尽管您可以将其移动到其他文件中并包含它。如果您将头文件保留为每个班级一个,希望它不会那么混乱。

您不必将所有 cpp 文件都切换到 hpp。这些只是扩展,它们大多无关紧要。尽管您可能只想在您的代码主要是模板时才考虑使用标头,因为无论如何模板代码都必须位于标头中,并且仅标头项目通常更容易包含在其他项目中,因为您不必担心链接.

【讨论】:

  • 这是一个糟糕的建议。标头和源代码的全部意义在于,当您包含头文件时,它仅包含标头的请求部分,这使得包含比在标头中包含整个代码要小得多。
  • 只有标题的库实际上是一种很常见的做法。请参阅Boost,这很可能是最常用的 C++ 库。但这在很大程度上取决于作者。传统的路由和动态链接有时也非常有用。但无论哪种方式,模板代码必须位于头文件中,才能在包含它的地方工作。或者如果模板特化在别处定义,则至少是基本模板。然后,必要时还必须包括这些专业。
猜你喜欢
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2016-05-23
  • 2016-02-25
相关资源
最近更新 更多