我有一个 main.cpp 和 node.h(template) 文件。当我只编译包含 node.h 的 main.cpp 时,它似乎有效。我想知道不编译 node.h 是否可以?
最佳答案
C++ 编译器通常要求所有模板的定义在使用它们的每个翻译单元中都是可见的(一个真正的异常(exception)是如果您只允许使用特定的特化并且这些特化在某个地方实例化,在那个特定的实例中你可以逃避隐藏实现)。
是否按照您描述的那样将模板声明从它们的定义中分离出来实际上只是一个样式问题。就我个人而言,我并不关心这一点,因为它使得找到任何给定模板的实际代码变得更加困难。
但是,如果您要处理的代码足够大(例如,许多 boost 库),那么根据许多私有(private)部分来实现公共(public)模板很有意义,并且拥有这些部分被拆分成自己的标题。但是同样,只要所有需要的代码在每个翻译单元中都可用,它就是简单的样式,只要它是一致的,一个选择实际上并不比另一个选择“更好”。
关于c++ - 在 C++ 中编译模板头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52546623/