在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近使用C++模板,虽然工作几年了,但是模板用的很少,确切的说自己实现的机会很小。 昨天写了一个代码maxheap.h 中实现了类模板的声明,我将实现写在maxheap.cpp中, 当在main.cpp中引用maxheap中的接口时,提示链接错误。网上提供了几个解决方案, 第一种方式是将maxheap.h和maxheap.cpp包含在某个.h文件中,这样在main函数中 包含这个.h即可。第二种方式叫分离模式,我没看,觉得没必要搞得那么复杂。第三种方式 是我最看好的方式,就是将模板类的实现也放在.h中。C++ stl模板就是在.h中实现的。
C++编译文件将.cpp编译为.o文件,在链接阶段将.o文件链接生成可执行文件。问题 就出现在模板实现的.cpp文件并不在编译时实例化,读者可以试着在模板实现的.cpp里 写一些错误的代码,编译器并没有监测到,因为模板实现的cpp没有参与编译。他需要在特定类型 绑定后才会实例化,是延时的。
编译器使用模板,通过更换模板参数来创建数据类型。这个过程就是模板实例化(Instantiation)。
所以将类模板的实现文件放在.h里,main函数包含该.h文件,当main函数用到该模板的特例化时 通过该.h就可以找到所有模板的实例化了。连接也没问题。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论