CGAL:要包括哪个 headers

CGAL: Which headers to include

确定程序编译需要哪些 header 的标准工作流程是什么?

举下面这个简单的例子

#include <iostream>
int main() {
  std::cout << CGAL::square(0.002) << '\n';
  return 0;
}

函数 squareAlgebraic_foundations/include/CGAL/number_utils.h 中定义。

问题 1:为什么仅 #include <CGAL/number_utils.h> 还不够?

我知道 #include <CGAL/basic.h> 使程序可以编译。 我想可以使用更多 fine-grained 文件包含并查看 basic.h 我发现 #include <CGAL/number_type_basic.h> 就足够了。

问题 2:使用 finer-grained 文件包含是否会减少编译时间(编译单元中的文本更少?)但是 executable/object 文件不会因为编译器从不需要的包含中删除多余的代码而有所不同?

问题 3:是否还有其他理由说明人们会使用更细的内含物? 某种风格指南? 或者包含一个 high-level header 以防止 low-level 代码中的更改是安全的?

问题4:CGAL中有哪些high-levelheader? 整个图书馆都有吗? 所有不同包之间的联系如何? 每个包裹都有一个吗?

问题 5:如果包含中到 lower-level header 文件是一个好习惯,那么确定需要哪些 header 的标准工作流程是什么,例如对于上述示例中的 square 函数?

几乎所有参考手册页,例如 class Triangulation_2 中的这一页,都给出了要包含哪个 header 文件的第一个信息。 所有更高级别的数据结构都使用 几何特征 class 进行参数化,在大多数情况下,它们会传递一个内核,例如 Exact_predicates_inexact_constructions_kernel,它再次说明什么 header 包括在内。后者将定义包括所有基础设施的数字类型。 请注意,CGAL/basic.h 未记录在案。