什么是"separately compiled C++ templates"?
What are "separately compiled C++ templates"?
有一次我看到一个声明,"单独编译的c++模板"是一个标准特性,没有一个可用的c++编译器支持。
什么是"单独编译的模板",为什么它们被忽略?
c++ 98引入了export
关键字,它允许你在另一个翻译单元中定义函数模板,只需要它的声明来编译使用它的代码。(如果你不清楚什么是定义,什么是声明,请看这里。基本上,您可以在另一个翻译单元中使用函数模板实现。这和其他函数一样。
然而,只有使用EDG的编译器前端的编译器才支持它,而且不是所有的编译器都正式支持它。事实上,我所知道的唯一官方支持它的编译器是Comeau c++。这就是为什么这个关键字不幸地从c++ 11中删除了。
我认为可以肯定地说,期望一个适当的模块系统可以解决c++围绕整个编译模型的许多缺点,但是,再次不幸的是,模块系统不被认为是可以在c++ 11的合理时间内解决的东西。我们只能寄希望于该标准的下一个版本。
单独编译的模板是您可以从另一个翻译单元引入模板定义的地方,而不必在每个TU中定义它们(通常在头文件中)。
基本上,它们被忽略了,因为就复杂性而言,它们实际上是不可能实现的,并且会带来许多不幸的副作用。
相关文章:
- ATL OLE DB Consumer Templates 与 Microsoft OLE DB Driver for
- 传递对variadic-templates的引用使用std ::参考 - wrapper
- Java generics vs C++ templates
- C++ templates and OpenBLAS
- Templates and g++ 4.7
- 在内存使用方面,templates+functors/lambdas是否次优
- 关于 Variadic Templates with Visual Studio 2010 的困惑
- power(C++ - {templates}) = power(C++)?
- 使用Templates从参数列表创建std::vector
- C++错误LNK 1120关于TEMPLATES
- Visual Studio 2015 No C++ CLR Templates
- 从重载运算符[](templates?)返回不同的类型
- C++/templates:我可以在编译时选择性地禁用类的函数吗
- 在编译时/templates检查变量的值
- Templates:将模板中的参数作为参数传递
- c++relpret_cast、virtual和templates都可以
- 如何在处理std::字符串和c样式字符串时使用Templates
- 使用C++中的Templates实现链表
- "template argument deduction for class templates"是否应该推断出可变参数类模板的空参数包?
- Cython C++ templates