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

来源:互联网 发布:数据多用list还是map 编辑:程序博客网 时间:2024/04/29 16:21

不建议你使用这种技术!这几乎就是 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 的最后一行,仍然有问题。因为这个头文件会被包含进不同的上层模块中,导致每修改一次,重新编译的内容大大增加。

3 0
原创粉丝点击