您的位置:首页 > 编程语言 > C语言/C++

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

2016-03-27 10:28 561 查看
不建议你使用这种技术!这几乎就是 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 的最后一行,仍然有问题。因为这个头文件会被包含进不同的上层模块中,导致每修改一次,重新编译的内容大大增加。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: