【问题标题】:C++ Template implementation file extension convention?C++模板实现文件扩展约定?
【发布时间】:2020-08-08 12:10:04
【问题描述】:

对于模板类实现使用什么文件扩展名有约定吗? **.tpp .template .hpp **

【问题讨论】:

  • 没有约定,但是如果您选择一种策略,最好在模块内始终如一地执行,或者更好的是,整个项目。
  • 我试图扩展关于 IDE 和自动构建系统的危险部分。看看吧。

标签: c++ templates coding-style


【解决方案1】:

“对于模板类实现使用什么文件扩展名有约定吗?”

没有真正为这些文件扩展名 AFAIK 建立标准约定。

虽然有许多常用的文件扩展名,例如

  • .icc
  • .inl
  • .tcc(这似乎至少被我的 GCC 4.8.1 标准库实现所使用)
  • ...

这并不重要,因为无论如何您都需要在模板头文件中使用#include "MyImpl.tcc"#include "MyImpl.tpp" 语句来明确说明它。

您可以使用例如.tcitemplate class i实施,我在这里创造性地发明了一个;-) )

重要的一点是,您应该对解决方案所涉及的所有项目使用一致的命名策略(这样可以更轻松地设置 IDE 首选项以突出显示语法)。


恕我直言,唯一的 no go 扩展是 .cc.cpp.cxx.c,这会使大多数自动构建系统和IDE 目前就在身边。构建系统将假定这些文件需要作为附加对象进行构建和链接,并且由于这些文件要么无法独立构建,要么最终在链接中出现多个符号定义而失败。

【讨论】:

  • 有时我使用.impl.hpp.tpl.hpp,因为它会自动提供语法高亮,并且不应该自动编译。大多数人会认为这是不可行的吗?
【解决方案2】:

没有。

很多项目并不在意,只是把所有东西都扔到.hpp 文件中。我这样做。

许多其他项目(如 Eigen 和 Boost 这样的大标题项目)将内联代码和模板实现拆分为 .inl(用于内联)文件。

我从未亲眼见过.tpp,但这并不意味着没有项目这样做。

但是没有约定,没有。

【讨论】:

  • 我在发送代码时使用.tpp(因此它与hppcpp 一致)。在开发过程中,我不会拆分模板标题。
  • Boost 主要使用.ipp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
  • 2017-08-30
  • 2016-07-14
相关资源
最近更新 更多