C++模板编译与模板参数推导详解
一、C++模板编译模型与实例化机制
在C++中,模板编译模型和模板实例化机制是两个相关但不同的概念。
模板编译模型决定了模板在程序翻译的各个阶段的含义,特别是在实例化时模板中各种构造的意义。名称查找是编译模型的重要组成部分。常见的编译模型有包含模型和分离模型,它们是语言定义的一部分。
模板实例化机制则是允许C++实现正确创建实例化的外部机制,这些机制可能会受到链接器和其他软件构建工具的要求的限制。
早期的Cfront实现对模板的处理超越了这两个概念。它使用特定的源文件组织约定为模板的实例化创建新的翻译单元,然后使用本质上的包含模型进行编译(尽管当时C++的名称查找规则有很大不同)。虽然Cfront没有实现模板的“单独编译”,但它通过创建隐式包含来营造出单独编译的假象。后来的一些实现(如Sun Microsystems默认提供,HP、EDG作为选项提供)也提供了类似的隐式包含机制,以与为Cfront开发的现有代码保持一定的兼容性。
下面通过一个例子详细说明Cfront的实现方案:
// File template.hpp:
template<class T>
// Cfront doesn’t know typename
void f(T);
// File template.cpp:
template<class T>
// Cfront doesn’t know typename
void f(T)
{
}
// File app.hpp:
class App {
...
};
// File mai
C++模板编译与参数推导详解
超级会员免费看
订阅专栏 解锁全文
102

被折叠的 条评论
为什么被折叠?



