C++模板在.h中声明,在.hpp中定义

rhu*_*arb 18 c++ templates header

我看到一些代码,其中开发人员在.h文件中定义了一个类模板,并在.hpp文件中定义了它的方法.这让我有点意外.

在处理模板时,C++中是否有特定的约定以及它们应该包含哪些文件?

例如,假设我有一个Vector带有矢量操作方法的类模板(加,减,点等).如果模板参数是float(比较运算符),我还想要专门化某些函数.你如何在文件之间分离所有这些(指定.h,.hpp,.cpp).

Joh*_*ing 18

通常(根据我的经验,YMMV)hpp文件是#include-ed CPP文件.这样做是为了将代码分解为两个物理文件,一个主要包含和一个实现详细信息文件,您的库的用户不需要知道.它是这样完成的:

super_lib.h(客户端需要的唯一文件#include)

template<...> class MyGizmo
{
public:
  void my_fancy_function();
};

#include "super_lib_implementation.hpp"
Run Code Online (Sandbox Code Playgroud)

super_lib_implementation.hpp(您的客户端不#include直接这样)

template<...> void MyGizmo<...>::my_fancy_function()
{
 // magic happens
}
Run Code Online (Sandbox Code Playgroud)