龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++模板限制实际应用方式探讨

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
C++ 编程语言中的模板应用是一个非常重要的操作技巧。它的应用在很大程度上提高了编程人员程序开发效率。在这篇文章中,我们将会重点介绍一下有关C++模板限制的相关应用,方便大

C++编程语言中的模板应用是一个非常重要的操作技巧。它的应用在很大程度上提高了编程人员程序开发效率。在这篇文章中,我们将会重点介绍一下有关C++模板限制的相关应用,方便大家理解。

1、浮点数不能作为 非类型模板参数 如:template <float /* or double */> class TT;

2、自定义类不能作为模板参数,这些自定义类也是 非类型模板参数。

  1. // 6-14-2009  
  2. #include <iostream> 
  3. using namespace std;  
  4. // #define FLOAT  
  5. // #define TEMPLATE_OBJECT  
  6. #define COMMON_OBJECT  
  7. #ifdef FLOAT  
  8. template <float f> 
  9. class TT;  
  10. #endif  
  11. #ifdef TEMPLATE_OBJECT  
  12. template < class T > 
  13. class TM {};  
  14. template < TM<int> c > 
  15. class TT;  
  16. #endif  
  17. #ifdef COMMON_OBJECT  
  18. class TN{};  
  19. template < TN c > 
  20. class TT;  
  21. #endif 

C++模板限制中还有一个,而且相当重要:

模板类或模板函数的声明与定义必须位于同一个文件中!除非新一代的编译器支持关键字export.

如果编译器不支持export关键字,但我们又想把声明与定义分开写,那该如何操作呢?方法如下:

把模板声明写在.h中,模板定义写在.cpp中,需要注意的是,我们并不像一般的文件包含那样,在.cpp中包含.h,而是在main.cpp中,把这两个东东包含进来如:

  1. // test.h  
  2. template <typename T> 
  3. class Test  
  4. {  
  5. public:  
  6. void print();  
  7. };  
  8. // test.cpp  
  9. template <typename T> 
  10. void Test<T>::print()  
  11. {  
  12. cout << "Successfully!" << endl;  
  13. }  
  14. // main.cpp  
  15. #include <iostream> 
  16. using namespace std;  
  17. #include "test.h"  
  18. #include "test.cpp"  
  19. int main()  
  20. {  
  21. Test<int> t;  
  22. t.print();  
  23. return 0;  

以上就是对C++模板限制的相关介绍。

精彩图集

赞助商链接