c++ - 在 C++ 中编译模板头

标签 c++ templates compilation

我有一个 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/

相关文章:

c++ - VC++ 平台的 TDD 和 DI

c++ - 使 C++ 暂停

c++ - Clang 中不明确的运算符重载

c++ - 使用带构造函数委托(delegate)的 SFINAE 通过类模板的构造函数一般地应用方法来初始化成员

javascript - Meteor——将点击处理程序绑定(bind)到条件内的按钮

java - Java解释器和编译器规则冲突

c++ - 无锁 "decrement if not zero"

c++ - 实现自定义QWebEngineUrlSchemeHandler,无法使用QNetworkReply进行回复

angularjs - 有什么方法可以使用指令动态添加 ng-model-options 吗?

c++ - 为 Raspberry pi 2 预编译 amazon-kinesis-video-streams-producer-sdk-cpp