什么是"separately compiled C++ templates"?

What are "separately compiled C++ templates"?

本文关键字:templates C++ separately 什么 compiled      更新时间:2023-10-16

有一次我看到一个声明,"单独编译的c++模板"是一个标准特性,没有一个可用的c++编译器支持。

什么是"单独编译的模板",为什么它们被忽略?

c++ 98引入了export关键字,它允许你在另一个翻译单元中定义函数模板,只需要它的声明来编译使用它的代码。(如果你不清楚什么是定义,什么是声明,请看这里。基本上,您可以在另一个翻译单元中使用函数模板实现。这和其他函数一样。

然而,只有使用EDG的编译器前端的编译器才支持它,而且不是所有的编译器都正式支持它。事实上,我所知道的唯一官方支持它的编译器是Comeau c++。这就是为什么这个关键字不幸地从c++ 11中删除了。

我认为可以肯定地说,期望一个适当的模块系统可以解决c++围绕整个编译模型的许多缺点,但是,再次不幸的是,模块系统不被认为是可以在c++ 11的合理时间内解决的东西。我们只能寄希望于该标准的下一个版本。

单独编译的模板是您可以从另一个翻译单元引入模板定义的地方,而不必在每个TU中定义它们(通常在头文件中)。

基本上,它们被忽略了,因为就复杂性而言,它们实际上是不可能实现的,并且会带来许多不幸的副作用。