免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1619 | 回复: 3
打印 上一主题 下一主题

[C++] 关于模板的编译问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-05 17:17 |只看该作者 |倒序浏览
照常理,模板类有定义.h,也有其中方法的实现.cpp。有人说对大多数编译器而言,只有定义和实现都在一个文件才能编译,我试了好像可以;也有人说可以用.h最后#include那个实现的cpp来代替,但好像不行。我觉得.h中怎么能包含.cpp呢?可就这样真的编译通过。有人能解释下吗?或者有什么其它的更“合理”的实现方法?

论坛徽章:
0
2 [报告]
发表于 2008-09-05 18:18 |只看该作者
现在的编译器不支持关键字export,因此,在用户实例化模板时必须能够看到你的模板源码,这也就是为什么我们通常把模板定义放在.h文件中的原因
有时,把所有模板定义都放在.h文件可能会造成文件太大,影响阅读,此时可能会选择把模板定义放在其它文件中(一般用.inl后缀而不是.cpp后缀,当然,用啥后缀都无所谓),然后在.h文件中将此文件内容包含进来。这样做的效果跟直接在.h文件中定义是一样的

论坛徽章:
0
3 [报告]
发表于 2008-09-05 19:46 |只看该作者
但是.h中的那个位置包含.inl呢?因为要求实现必须在定义之后,所以若在最后#include ....inl似乎也没用(我是在最后#include "xxx.cpp"的,没用)

论坛徽章:
0
4 [报告]
发表于 2008-09-05 20:05 |只看该作者
原帖由 jchc 于 2008-9-5 19:46 发表
但是.h中的那个位置包含.inl呢?因为要求实现必须在定义之后,所以若在最后#include ....inl似乎也没用(我是在最后#include "xxx.cpp"的,没用)

给你举个例子:

  1. // foo.h
  2. #ifndef FOO_H
  3. #define FOO_h

  4. template <typname T>
  5. void foo();

  6. #include "foo.inl"

  7. #endif // FOO_H
复制代码


  1. // foo.inl
  2. template <typename T>
  3. void foo()
  4. {
  5.     //..
  6. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP