设为首页 加入收藏

TOP

1.4.1 什么是外名模板
2013-10-07 16:30:54 来源: 作者: 【 】 浏览:238
Tags:1.4.1 什么 模板

1.4.1 什么是外名模板

外名模板提倡将模板的声明与实现分别写在头文件与主文件内,如此实现的模板需要在模板声明前加关键字export以标记为外名模板,如例1.8所示。

例1.8

  1. // ======================================  
  2. // 文件名:square.hpp  
  3. export template<typename T> 
  4. T square(T const &v);  
  5.  
  6. // ======================================  
  7. // 文件名:square.cpp  
  8. #include "square.hpp"  
  9. export template<typename T> 
  10. T square(T const &v) {return v * v;}  
  11.  
  12. // ======================================  
  13. // 文件名:main.cpp  
  14. #include "square.hpp"  
  15. #include <iostream> 
  16.  
  17. int main()  
  18. {  
  19.     std::cout << square(0.1f) << std::endl;  

例1.8中有一个函数模板square,其作用是返回给定参数的平方值。该函数模板的声明和实现分别放在头文件square.hpp和主文件square.cpp中,并且被声明为一个外名模板,即声明以关键字export开头后接正常声明或实现。在文件main.cpp中调用该函数模板计算一个浮点数的平方并打印。

与通常的模板用法不同,在main.cpp中只是将square的声明包含进来,所以在编译main.cpp时,编译器无从得知模板如何实现,只好留一个函数调用以待在链接阶段可以找到对应函数链接。另外,文件square.cpp中只含有一个模板实现而无模板调用,一般编译器在编译此文件时不会生成任何函数实例代码。而在链接时,会因为无法找到main.cpp中所需要的square<float>模板实例而报错。例如用GCC编译时情况大抵如此,并且GCC还会给出一个“不支持export”的警告。
 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.4 尴尬的Export Template 下一篇2.1 类型无关的数据结构

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: