我看到一条声明“单独编译的C ++模板”是一个标准功能,没有一个可用的C ++编译器支持。
那些“单独编译的模板”是什么?它们为什么被忽略?
答案 0 :(得分:3)
C ++ 98引入了export
关键字,允许您 在另一个翻译单元中定义功能模板 ,只有 >声明需要编译使用它的代码。 (如果您对定义与声明的含义不同,请参阅here。基本上,您可以在另一个翻译单元中使用函数模板 implementation 。)这与其他函数一样。
然而,只有使用EDG编译器前端的编译器才支持它,而且并非所有编译器都正式支持它。事实上,我所知道的唯一正式支持它的编译器是Comeau C++。这就是为什么这个关键字从C ++ 11中删除了。
我认为可以肯定地说,预期一个适当的模块系统可以解决围绕整个编译模型的许多缺点的C ++,但是,不幸的是,模块系统不被认为是可以解决的问题。 C ++ 11的合理时间。我们将不得不希望下一版本的标准。
答案 1 :(得分:0)
您可以从另一个翻译单元引入模板定义,而不必在每个TU中定义它们(通常在标题中)。
基本上,它们被忽略了,因为它们在复杂性方面几乎不可能实现,并带来许多不幸的副作用。