C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
2016-10-27 13:54
1341 查看
C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
这个feature叫做Export Template,即外名模板,它的作用在于使得模板代码可依照C/C++语言习惯,将模板声明和实现分开分别放到.h和.cpp文件中,并且可以减少冗长的模板编译单元中分别实例化)。Export Template曾经是被写入C++98标准中的,然并卵,很少有主流编译器在某编译main.cpp时,como的处理与其他编译square.cpp时,由于square模板声明是一个外名模板,虽然como不会为其生成任何模板实例代码,但是会额外生成一个square.et文件,其中包含对square函数模板实现的索引信息。之后进入一个预链接(prelink)阶段。在此阶段,编译时发现的对模板实例的需求,从所有et文件中查找到所需模板实现所在代码文件(cpp文件),并重新编译square.cpp以生成square<float>供链接使用。随后的链接过程和其他C++编译器处理全局类对象实例构造的过程,它们需要在main函数之前构造好。
而现代编译单元当场生成实例,随后在链接时从重复实例中随机挑选一个进行链接。然而为了支持Export Template,需要对现有编译器抛弃了。
于是C++的模板库,一定是开源的^ ^
相关文章推荐
- C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
- C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
- C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
- C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
- C++模板类头文件和实现文件分离的方法(vs2012测试)
- 在VC9.0中实现C++模板类头文件和实现文件分离的方法
- C++ 接口与实现分离技术---如何将文件间的编译关系降至最低
- 实现C++模板类头文件和实现文件分离的方法
- 实现C++模板类头文件和实现文件分离的方法
- 在VC9.0中实现C++模板类头文件和实现文件分离的方法
- 在VC9.0中实现C++模板类头文件和实现文件分离的方法
- C++模板类头文件和实现文件分离
- C++模板的声明与实现分离 编译错误详解
- 如何用VS2010新建一个类?用来写C++文件的标准格式建立?就是能做到声把声明放在.H里,实现放在.CPP里的
- [C++]模板类的声明与实现分离问题
- C++的类模板的问题(实现文件和头文件放在一起), 因为模板不支持分离编译
- C++中模板类声明和实现能否分离?
- c++ 模板头文件与实现文件分离
- C++模板编程:如何使非通用的模板函数实现声明和定义分离
- C/C++程序编译步骤 如何生成可执行文件