缺少了C++模板真的不行吗

开发 后端
完善的C++模板对于技术人员来说,提供了相关专业的工具,这样可以为整个软件开发周期少了不少弯路,降低工作的复杂性。

首次进行C++的初始学习时,首先接触到的就是C++模板,在创建C++模板时出现了一些困难和难以理解的地方,比如向上类型转换,向下类型转换等相关麻烦,对于除类型之外,其余都相同的函数,我们一般有3种解决办法。

1、针对每个不同的类型重复地编写函数实体(C语言的做法):

  1. T const& f(T const& a, T const& b)  
  2. {  
  3. return a + b; //1处  
  4. }  
  5. int g = f(1,2); 

2、使用Object(Java的做法)或者void*缺点有两个效率问题方面也有问题类型检查问题

3、使用宏预处理机制

缺点:只是愚蠢的文本替换,而且也不会考虑作用域和类型安全。然而,应用C++模板却可以避免这些缺点,我们可以编写:

优点:

代码简洁优雅,所有参数类型都以T来代替,真正实现了类型无关性。更好的类型安全性,所有的类型检查都是在编译期进行,而且避免使用指针。不存在继承,效率高。(1)没有虚函数;(2)所有的一切工作都是在编译期完成,大大提高运行效率。目的:告诉编译器如何做出最佳的选择,而且这种选择全部是在编译期完成的。C++模板的机制:特化 和 实参演绎

  1.  // traits/accumtraits3.hpp  
  2. template  
  3. lass AccumulationTraits;  
  4. c template<> 
  5. class AccumulationTraits {  
  6. public:  
  7. typedef int AccT;  
  8. static AccT const zero = 0;  
  9. };  
  10. template<> 
  11. class AccumulationTraits {  
  12. public:  
  13. typedef int AccT;  
  14. static AccT const zero = 0;  
  15. };  
  16. template<> 
  17. class AccumulationTraits {  
  18. public:  
  19. typedef long AccT;  
  20. static AccT const zero = 0;  
  21. };  
  22. (2)policy:通常表现为某个函数,指定的是一种行为  
  23. class SumPolicy {  
  24. public:  
  25. template  
  26. static void accumulate (T1& total, T2 const & value) {  
  27. total += value;  
  28. }  
  29. };  
  30. (3)trait和policy的用法:  
  31. template > 
  32. class Accum {  
  33. public:  
  34. typedef typename Traits::AccT AccT;  
  35. static AccT accum (T const* beg, T const* end) {  
  36. AccT total = Traits::zero();  
  37. while (beg != end) {  
  38. Policy::accumulate(total, *beg);  
  39. ++beg;  
  40. }  
  41. return total;  
  42. }  
  43. }; 

优点:由:全局特化->局部特化->基本C++模板,这种特化顺序的选择与匹配(重载解析规则)是由编译器自动进行的,无需人工参与。可以根据不同的情况(诸如类型不同,条件不同),给出不同的实现,从而获得更加灵活的针对性。可以针对任何变化,改善了程序的扩展性。

实参演绎
第1部分介绍了模板的基本概念,以教程的风格来介绍这些基本概念。第2部分阐述了模板的语言细节,可以作为一本基于模板的构造的参考手册。第3部分介绍了C++模板所支持的基本设计技术,范围覆盖从微小的概念一直延伸到复杂的用法;一些技术在别的书籍都没有出现过。第4部分基于前两部分,深入讨论了各种使用C++模板的普通应用程序。

【编辑推荐】

  1. 如何正确编写C++项目开发编写项目计划书
  2. 对C++库函数进行学习探索总结笔记
  3. 深度演示C++语言的种种高安全性
  4. 详细介绍如何准确无误的编写C++语言
  5. 深度演示C++语言的种种高安全性
责任编辑:chenqingxiang 来源: C114中国通信网
相关推荐

2012-09-17 11:06:06

2022-08-22 15:32:59

C++C代码

2023-12-18 11:15:03

2023-03-26 19:58:25

ChatGPT技术架构

2024-01-03 09:40:01

QA软件测试开发

2010-01-21 10:23:53

C++代码

2023-12-13 10:51:49

C++函数模板编程

2010-01-15 16:45:35

C++语言

2010-01-26 09:24:53

C++语言

2015-08-06 10:19:19

编程脑子

2023-12-06 13:48:00

C++代码

2010-02-06 16:59:19

C++ kmp算法模板

2010-02-03 17:42:33

C++模板参数

2010-01-14 10:34:02

C++语言

2010-01-20 10:14:53

C++程序

2010-01-20 17:23:03

C++编程语言

2010-01-18 11:12:36

2022-09-22 10:22:36

C++编程语言代码

2010-01-26 13:55:07

C++标准模板库

2011-08-03 13:04:54

点赞
收藏

51CTO技术栈公众号