省流:都是一种非标准的约定,具体情况按团队规范来。

Header Plus Plus (.hpp)

.h 的 C++ 替代,用来包含类定义、函数声明、宏等,是接口定义的一部分。

特殊用法: 在 C++ 模板编程或只包含小型实现代码的情况下,.hpp 文件有时会包含完整的实现代码(包括函数体),尤其是当代码依赖于模板且为了编译器能看到完整的定义时。

Template Plus PLus (.tpp)

专门用于存放 C++ 模板的实现

原因: 由于 C++ 模板(Templates)的特殊性,它们的定义和实现通常都必须放在头文件中,才能在编译时被实例化。为了将模板的声明(放在 .hpp.h 中)和实现(函数体、成员函数体)分离,保持接口文件的整洁,开发者会把实现部分放入一个 .tpp 文件。

如何使用: 这个 .tpp 文件不会单独被编译,而是被主头文件(如 .hpp)在末尾使用 #include 预处理指令包含进去

Inline Plus Plus (.ipp)

  • 用途: 类似于 .tpp,但它通常用于存放 内联函数 (Inline Functions)模板 的实现代码。

  • 原因: 内联函数和模板的实现都必须在每个包含它们的编译单元(Translation Unit)中可见。

    • 将这些实现放在 .ipp 中,然后由主头文件(如 .hpp)包含,可以保持主头文件(.hpp)的整洁,只保留声明和高层接口定义。
  • 如何使用:.tpp 类似,它也是被主头文件 #include 包含的。

更多问题

.hpp和.h有什么区别?有没有标准告诉我怎么做?

编译器的角度来看,.hpp.h 没有本质区别。它们都只是文本文件,在编译过程中,C++ 预处理器会使用 #include 指令将它们的内容复制到源文件中。

但是在社区约定和惯例中,一般用来区分是来自 C 还是来自 C++ 的头文件。

没有标准规定,但是是约定俗成。