C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
2016-03-27 10:28
561 查看
不建议你使用这种技术!这几乎就是 C++ 的一个补丁,基本上只会让你的程序变得更混乱。除非不得已,还是不用为好。以下是具体写法:
假设调用文件是这样:
头文件是这样:
首先,这种写法兼容性不好,老编译器可能不支持。更可恶的是,这种写法使得你的模版实现竟然要依赖于调用者。就算你把显式实例化的部分放在单独的头文件里,然后 include 进 foobar.cpp 的最后一行,仍然有问题。因为这个头文件会被包含进不同的上层模块中,导致每修改一次,重新编译的内容大大增加。
假设调用文件是这样:
// 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 的最后一行,仍然有问题。因为这个头文件会被包含进不同的上层模块中,导致每修改一次,重新编译的内容大大增加。
相关文章推荐
- [面试] C/C++ —— MFC
- 在C语言中解析JSON配置文件
- C++值传递时返回临时变量,引用传参
- 《21天学通C++(第五版)》 [美] Jesse Liberty Bradley Jones著——个人学习笔记
- C++作业2
- [面试] C/C++ 语法(五) —— extern
- c语言 typedef
- C语言中内存分配
- C++输出流格式
- C语言基本概念之序列点
- 排序——堆排序(C++)
- c++设计一个计时器(能够暂停,重新开始,继续)的功能。写的不好,仅供参考!
- 设计模式 之 单例模式 (C++ 懒汉经典实现 & DCL实现 & 饿汉经典实现)
- 牛客网 算法第一题 二叉树按层次打印问题
- C++11智能指针之shared_ptr的使用(1)
- 《C++》06 C++ 存储类
- 《C++》05 C++ 修饰符类型
- 《C++》 04 C++ 常量
- C/C++中内联函数与静态函数
- 《C++》03 C++ 变量作用域