【问题标题】:Difference between .h, .hpp, .cpp files in PCLPCL 中 .h、.hpp、.cpp 文件之间的区别
【发布时间】:2019-11-12 22:29:10
【问题描述】:

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

  • include/pcl/filters/bilateral.h - 将包含所有定义;
  • include/pcl/filters/impl/bilateral.hpp - 将包含模板化实现;
  • src/bilateral.cpp - 将包含显式模板实例化。

我了解头文件和实现的一般概念,但是为什么会有两个头文件?模板化实现和显式模板实例化有什么区别?

此时我正在使用 Kmeans 类,并且没有使用 .hpp,而是它们只是在 .cpp file 中实现了,并且它们包括 .h file。为什么?此外,在 kmeans.h 文件中,它们提供了一些公共成员函数的实现,而不仅仅是 setter 和 getter。我找不到这段代码背后的理由。

谢谢!

【问题讨论】:

  • 在您引用的内容之后,他们提供了 .h .hpp 和 .cpp 文件中内容的详细示例。你读过它吗?请同时参考并尝试更好地解释您不理解的内容。目前,我很想简单地发布您引用后的文字作为答案......
  • 模板定义不能进入源代码,但有时将它们与声明分开是一个好主意,我认为这就是要解释的全部内容。见这里stackoverflow.com/questions/495021/…
  • 您正在查看的类 (kmeans) 不是模板,因此不需要 .hpp
  • @foreknownas_463035818 谢谢,您的最后评论澄清了我的困惑。抱歉我的问题有点愚蠢,但我是 C++ 新手。

标签: c++ header-files point-cloud-library


【解决方案1】:

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

实现在 hpp 和 cpp 文件中。

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

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

【讨论】:

    猜你喜欢
    • 2010-12-21
    • 2010-10-26
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多