C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
2023-09-27 14:24:25 时间
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++游戏引擎Easy2D】我拿吃零食的时间,学会了在C++上添加可点击按钮
- 使用SDL2播放yuv文件,采用C++实现SDL2视频播放器
- 【VS开发】【计算机视觉】OpenCV读写xml文件《C++版本》
- 【神经网络与深度学习】【C/C++】使用blas做矩阵乘法
- C/C++文件操作经验总结
- C++之Vect
- C语言和C++的文件操作
- 从零开始学C++之IO流类库(二):文件流(fstream, ifstream, ofstream)的打开关闭、流状态
- c/c++性能优化--I/O优化(上)
- C++文件读写
- C++实现:把一个文件夹里的冗余文件(.txt)删除
- 代码在线执行工具(PHP,Java,C++ 等)
- 关于Java与c++隐藏、重写不同实现机制的探讨
- C++学习笔记_05 string 2021-04-16
- OpenCV无缝融合应用(三)--局部区域亮度调整(附C++源码)
- 【C++】C++核心编程部分-内存分区模型-引用-函数提高-类与对象-文件操作
- 【C++】《黑马程序员C++》课程笔记总结
- DES 算法的 C++ 与 JAVA 互相加解密
- C++11智能指针之std::unique_ptr
- C++017-C++文件读写应用
- 在vc++上简单搭建环境(包括文件引用)
- c++程序中写测试log到文件的简单实现
- [C/C++] 各种C/C++编译器对UTF-8源码文件的兼容性测试(VC、GCC、BCB)
- Visual C++编程命名规则
- 11.C++-临时对象分析
- C++中fstream文件写入读出代码
- Ubuntu 12.04 使用Eclipse搭建C/C++编译环境