模板函数不能放在cpp文件里,搞的我都不敢使用模板,大家都是怎么使用模板的?

JinCraft 2013-04-20 12:22:04
翻看开源项目的源码使用模板一般有几种,一种就是把所有代码全放在.h里
另一种是写个.h然后在.h最下面加上#include"XXX.hpp" XXX.hpp里是模板函数的函数体

其实这两种方法本质上都是把所有模板函数都放在一个.h里,这样只要一修改这个.h或者.hpp,一大堆文件就得重新编译。工程小了还好,要是稍微大点的工程基本就要把时间全都砸在编译上了。

该怎么使用模板好啊?
...全文
747 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hugett 2013-05-30
  • 打赏
  • 举报
回复
一般都是写在一个头文件中。。
我看你有戏 2013-05-30
  • 打赏
  • 举报
回复
模版被别人看到有啥关系啊,不影响的,调用的地方不要看到就好了啊
赵4老师 2013-05-30
  • 打赏
  • 举报
回复
语法糖越甜,编译调试查错越苦!
lemonlinger 2013-05-30
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
语法糖越甜,编译调试查错越苦!
疯狂的红豆 2013-05-29
  • 打赏
  • 举报
回复
大多数编译器模板参数的推导是编译期行为,所以只能放在头文件中了。(不知道我这么说对不对呢?)
  • 打赏
  • 举报
回复
直接写头文件中。
clever101 2013-05-29
  • 打赏
  • 举报
回复
引用 2 楼 FancyMouse 的回复:
如果已经知道哪些需要特化的话,我自己的代码里经常是声明写.h,定义写.inl,然后对于每个特化写一个cpp,#include .h, #include .inl, 然后template class A<int>;。调用者只#include .h。 inl重写只会影响到每个特化的cpp,不会影响到调用者。
原来可以这样啊!
FancyMouse 2013-04-20
  • 打赏
  • 举报
回复
如果已经知道哪些需要特化的话,我自己的代码里经常是声明写.h,定义写.inl,然后对于每个特化写一个cpp,#include .h, #include .inl, 然后template class A<int>;。调用者只#include .h。 inl重写只会影响到每个特化的cpp,不会影响到调用者。
ri_aje 2013-04-20
  • 打赏
  • 举报
回复
就这么用,模板确实会带来编译时间增加,不过如果模板写的好的话,通常能够减少运行时间,*通常*,没有保证的。 还有一种方法是 explicit instantiation,不过这个很麻烦,能适用的情况也比较少。

64,644

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧