在C++中编译模板标头

Compiling template header in C++

本文关键字:编译 C++      更新时间:2023-10-16

我有一个main.cpp和node.h(template(文件。当我只编译包含 node.h 的 main 时.cpp它似乎有效。我想知道是否可以不编译 node.h?

C++编译器通常要求所有模板的定义在使用它们的每个翻译单元中都可见(一个真正的例外是,如果您只允许使用特定的专用化,并且这些专用化在某处实例化,在该特定实例中,您可以隐藏实现(。

是否按照您所描述的那样将模板声明与其定义分开实际上只是一个样式问题。就个人而言,我不关心这一点,因为它使找到任何给定模板的实际代码变得更加困难。

但是,如果您正在处理的代码足够大(例如,许多 boost 库都是如此(,那么就许多私有部分而言实现公共模板可能是有意义的,并且将这些部分拆分为自己的标头是有意义的。但同样,只要每个翻译单元中都有所有需要的代码,它只是风格,一个选择实际上并不比另一个选择"更好",只要它是一致的。