什么是“单独编译的C ++模板”?

时间:2011-10-01 21:33:36

标签: c++ templates

我看到一条声明“单独编译的C ++模板”是一个标准功能,没有一个可用的C ++编译器支持。

那些“单独编译的模板”是什么?它们为什么被忽略?

2 个答案:

答案 0 :(得分:3)

C ++ 98引入了export关键字,允许您 在另一个翻译单元中定义功能模板 ,只有 >声明需要编译使用它的代码。 (如果您对定义与声明的含义不同,请参阅here。基本上,您可以在另一个翻译单元中使用函数模板 implementation 。)这与其他函数一样。

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

我认为可以肯定地说,预期一个适当的模块系统可以解决围绕整个编译模型的许多缺点的C ++,但是,不幸的是,模块系统不被认为是可以解决的问题。 C ++ 11的合理时间。我们将不得不希望下一版本的标准。

答案 1 :(得分:0)

您可以从另一个翻译单元引入模板定义,而不必在每个TU中定义它们(通常在标题中)。

基本上,它们被忽略了,因为它们在复杂性方面几乎不可能实现,并带来许多不幸的副作用。