C++模板实现文件的扩展名惯例是什么?

20

对于模板类实现,有一种约定俗成的文件扩展名吗? **.tpp .template .hpp **

(译者注:这句话是询问一个技术问题,是否有一种常见的命名方式来区分模板类的声明和定义,给出了几个可能的文件扩展名选项)


1
没有固定的规范,但是如果你选择一种策略,请保持一致性,最好在模块内或者整个项目中都采用。 - Philip Stuyck
我已经尝试扩展有关IDE和自动化构建系统的危险部分。看一下。 - πάντα ῥεῖ
3个回答

25
“是否有关于模板类实现使用哪种文件扩展名的惯例?”实际上,目前还没有确立这些文件扩展名的标准惯例。
常用的文件扩展名有很多,例如:
- .icc - .inl - .tcc(至少在我的GCC 4.8.1标准库实现中使用) - ...
但其实并不太重要,因为你需要在模板头文件中使用“#include "MyImpl.tcc"”、“#include "MyImpl.tpp"”等显式声明。你可以使用如“.tci”(表示“template class implementation”,我在这里即兴创造了这个名称)等自定义的文件扩展名。
重要的是,你应该在涉及解决方案的所有项目中使用一致的命名策略(这将使设置IDE语法高亮更加容易)。
唯一不可取的扩展名是.cc、.cpp、.cxx和.c,因为它们会让大多数自动化构建系统和IDE混淆。构建系统会认为这些文件需要作为额外的对象进行构建和链接,并因此无法独立构建或出现多个符号定义而失败。

有时我会使用 .impl.hpp.tpl.hpp,因为它可以自动进行语法高亮,并且不应该被自动编译。这样做是否会被大多数人认为是不可取的? - renardesque

9

不。

许多项目并不太在意代码组织,他们直接把所有内容都放在 .hpp 文件中。我也这样做。

其他一些项目(如 Eigen 和 Boost 这样的大型头文件项目)则会将内联代码和模板实现分别放在 .inl(表示 inline)文件中。

我个人从未见过使用 .tpp 的情况,但这并不意味着没有项目这样做。

但是并没有任何约定。


жҲ‘еңЁеҸ‘еёғд»Јз Ғж—¶дҪҝз”Ё.tppпјҲиҝҷж ·дёҺhppе’ҢcppжҜ”иҫғдёҖиҮҙпјүгҖӮеңЁејҖеҸ‘иҝҮзЁӢдёӯпјҢжҲ‘дёҚдјҡжӢҶеҲҶжЁЎжқҝеӨҙж–Ү件гҖӮ - nonsensation
1
Boost 大多使用 .ipp - R.J

0
以下是VSCode识别为C++实现文件的一些(非详尽):
.ixx
.inl
.tpp
.ipp
...

VSCode似乎不喜欢.tcc和.icc文件。
我喜欢ipp,因为它带来了“实现的i”。Boost的作者显然也喜欢它。但这只是我的个人意见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接