C++中模板声明与实现的分离问题

问题:

初学C++,依据《C++ primer》的例子在VS2010上实现泛型句柄类Handle是,将模板的声明与实现分别放在.h和.cpp文件中,并在.h的模板类之后添加“#include XX.cpp”;第一次编译成功,但当我第二次编译时出错。


参阅资料之后。得出两种解决方案

(1)添加宏命令。出现上面的错误是因为我在源文件(.cpp文件)中添加了“#include “XX.h”。但如果我不包含头文件的话,源文件就看不到头文件,也会出现编译错误。参考http://blog.csdn.net/microsues/article/details/6078385 可以在头文件中模板类之后的“#include XX.cpp”前面添加一个宏“#define NAME”,然后在源文件中去掉“#include “XX.h”,并在模板实现代码前后分别添加“ifdef NAME ”和“#endif”。此时可以编译通过。这种方法适用VS2010,不是所有的编译器都适合。这和《C++ primer》上写的不一致。可能是VC不能很好的支持“包含”模型。

(2)将模板的声明和实现写在同一个头文件中。

参考资料:http://stackoverflow.com/questions/1724036/splitting-templated-c-classes-into-hpp-cpp-files-is-it-possible

因为编译模板时,需要知道模板的定义。为了简化模板,可以先写模板类,然后在模板类之后实现模板。为了实现接口和实现分离,可以分离类的数据结构和算法。类模板只表示数据结构,将算法的实现细节隐藏非模板类库里。即模板类只用很少的代码来保存数据,其他的工作交给算法类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值