PCL 中的 .h、.hpp、.cpp 文件之间的差异

Difference between .h, .hpp, .cpp files in PCL

我不明白点云库中的 .h、.hpp 和 .cpp 文件之间的区别。 Here 是双边过滤器的一个例子,他们说:

  • include/pcl/filters/bilateral.h - will contain all definitions;
  • include/pcl/filters/impl/bilateral.hpp - will contain the templated implementations;
  • src/bilateral.cpp - will contain the explicit template instantiations.

头文件的大致概念和实现我都明白了,但是为什么会有两个头文件呢?模板化实现和显式模板实例化有什么区别?

此刻我正在使用 Kmeans class 并且没有使用 .hpp,相反它们只是在 .cpp file and they include an .h file 中实现。为什么?此外,在 kmeans.h 文件中,他们给出了一些 public 成员函数的实现,而不仅仅是 setter 和 getter。我找不到这段代码背后的基本原理。

谢谢!

考虑到只有 .h 是头文件,一个包含定义的文件和一个您应该包含的文件。

实现在 hpp 和 cpp 文件中。

  • hpp:包含通用模板 template<class T>
  • cpp: 包含非模板函数或显式实例化 template<pcl::PointXYZ>

.h 和.hpp 文件可以合并到同一个文件中,但将它们分开会更清楚。