C 汇编如何处理共享库和模板

How C++ compilation handles shared library and template

本文关键字:共享 处理 汇编 何处理      更新时间:2023-10-16

我曾经读过C 基本上根据编译时间使用的用法列举所有可能的模板类型的地方,因此在运行时不存在模板的概念。看来,这就是所接受的答案是从模板汇编

我的问题是,如果是这种情况,STL如何处理自定义类型,当所有内容都已编译和完成时,如何处理自定义类型?这可以更广泛地适用于使用模板编译的任何自定义库。

(我本可以在答案的评论中问这个,但我没有足够的积分(

如果图书馆想要提供其客户可以使用任意类型实例化的模板,则必须在标题文件中提供模板的完整定义。这就是为什么许多C 库(包括Boost的大部分(都是仅标题的原因。然后,编译器可以访问模板的定义,并可以将其与客户端提供的任何类型/值实例化。

有关该主题的详细处理,请参阅堆栈溢出问题,为什么仅在标题文件中实现模板?


请注意,这仅当我说的是旨在与任意类型一起使用的模板时适用。如果一组实例是有限的,可以在构建共享库时确定,则可以对所有需要支持的模板参数组合的所有模板创建明确的实例化。然后,不需要公开模板的定义,但是当然,不可能在客户端代码中使用不同类型的模板实例化模板。

为此,有一些几何库将其定义作为模板提供,以便它们可以与floatdouble同时使用以表示浮点数,但不要公开模板定义。他们只是将所有代码与floatdouble预先启动。然后,客户可以使用这些实例,但不能将它们用于Exmaple long doubleMyCustomFloat