VS里面的模板类的声明和实现不能分开成两个文件的吗?
本帖最后由 su_787910081 于 2013-10-13 20:20:59 编辑 VS里面的模板类的声明和实现不能分开成两个文件的吗?
我在VS2010 里面写了一个模板类,我把声明和实现分开后,编译能通过,但是一但在外面使用这个类实例化一个对象的话,连构造函数和析构函数都无法连接。后来我把实现全部写到头文件中去了后,才可以用的。这是为什么呢。还是我写错了? C++ 模板类
[解决办法]
一般情况下,模板定义是要全部写在头文件中的。因为编译器在实例化模板的时候,需要见到完整的定义。
不过模板也可以用前置声明+显示实例化的方式。只是用法更怪一些,而且用途受限制(没有显示实例化过的类型还是不能用),这个《C++ Template》一书上有讲到。
[解决办法]
楼主可以看看STL的头文件,基本上都是声明、实现在一起的。
[解决办法]
是,模板都放一起确实很长。而且开源还好,闭源的话,知识产权可能也是问题。
你想的没错,对于没有使用过的模板函数,甚至模板类,编译器只做非常基本的检查,不会实例化,也就不会生成目标代码。这样也有好处:不必为没有使用的东西买单。
至于说检查错误,如果是自己写着玩玩的小程序,那么用不到的函数你写它做啥呢?如果是正儿八经的项目甚至函数库,那么你本来也应该自己写点单元测试什么的,否则,难道你把完全没测过的东西直接发布给别人用么?
[解决办法]
VC没有实现export关键字。以后也不会实现。
[解决办法]
EDG实现了模板类的导出,但是认为这并不是明智的选择,参考Why We Can’t Afford Export
[解决办法]
同意ls观点。
实在觉得h文件太长,可以把模板定义写在cpp里,然后在h文件末尾#include “x.cpp".
但其实是换汤不换药,模板声明和定义还是必须在同一文件中。
[解决办法]