程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 缺少了C++模板真的不行嗎

缺少了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、使用ObjectJava的做法)或者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++語言的種種高安全性

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved