最近我了解到如果我想使用模板,我应该只在头文件中实现代码。我知道有解决方案可以在 .h 和 .cpp 文件中做到这一点,但只是假设我不想这样做,我应该在 .h 文件中写我所有的代码吗?即使程序可能很大,这是一种编写代码的好方法吗?此外,只有 .h 文件(不包括 main 函数)并且从不使用 .cpp 文件看起来很奇怪。
由于 C++ 编译过程,模板通常无法像通常对标头 ( *.h
) 和源文件 ( *.cpp
)那样将声明和接口文档与实现分开。
在编译过程中,所有头文件都包含在调用它们的源文件中,然后这些源文件被独立处理,最后所有生成的目标文件链接在一起成为一个可执行文件。模板是通用数据类型的函数,它们仅针对调用它们的数据类型进行实例化。这意味着模板函数不会创建任何代码,只要它没有被具有有效模板参数的人实例化。您必须以某种方式确保使用访问模板函数的所有源文件所需的数据类型实例化模板。
*.h
文件中并在*.hpp
-files 中定义实现(类似于* .cpp
,请参见此处)将声明(和文档)与实现分开。所以通常它取决于用法:如果您知道特定模板函数仅在特定源文件中使用,您可以将文档、声明和实现放入源文件(而不是头文件)中。如果要与多个源文件共享模板函数,请将声明和实现放在标题中。这通常是标准方式,因为它最灵活。如果您编写了一个完全模板化的库,那么可能会将文件中的声明和文档以及文件中的*.h
实现分开*.hpp
文件可能是最有意义的,但主要是为了有一个更简单的概述。无论如何,在某些函数的声明和实现之间没有明确分离是完全正常的,因此某些头文件可能缺少相应的源文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句