CGAL:要包括哪个 headers
CGAL: Which headers to include
确定程序编译需要哪些 header 的标准工作流程是什么?
举下面这个简单的例子
#include <iostream>
int main() {
std::cout << CGAL::square(0.002) << '\n';
return 0;
}
函数 square
在 Algebraic_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
未记录在案。
确定程序编译需要哪些 header 的标准工作流程是什么?
举下面这个简单的例子
#include <iostream>
int main() {
std::cout << CGAL::square(0.002) << '\n';
return 0;
}
函数 square
在 Algebraic_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
未记录在案。