C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?

不建议你使用这种技术!这几乎就是 C++ 的一个补丁,基本上只会让你的程序变得更混乱。除非不得已,还是不用为好。以下是具体写法:

假设调用文件是这样:

// main.cpp#include "foobar.h"intmain(){foobar<int>f;*(f.get())=0;return0;}

头文件是这样:

// foobar.htemplate<typenameT>classfoobar{public:foobar():data(){data=newT;}~foobar(){deletedata;}T*get();// 这个方法是你想写在 cpp 文件里的private:T*data;};
cpp 文件这么写:
// foobar.cpp#include "foobar.h"template<typenameT>T*foobar<T>::get(){returnthis->data;}templateclassfoobar<int>;// 显式实例化

首先,这种写法兼容性不好,老编译器可能不支持。更可恶的是,这种写法使得你的模版实现竟然要依赖于调用者。就算你把显式实例化的部分放在单独的头文件里,然后 include 进 foobar.cpp 的最后一行,仍然有问题。因为这个头文件会被包含进不同的上层模块中,导致每修改一次,重新编译的内容大大增加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值