成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++非類型類模板參數基本概念正確理解

開發 后端
C++非類型類模板參數在開發人員眼中一般都會被認為是一個全局變量的角色。我們將會在這里以一段代碼為大家解讀這方面的知識。

C++編程語言已經出現就立即引起了開發人員的注意,它具有C語言的所用功能,并能支持許多程序設計風格。我們今天要為大家介紹的則是C++非類型類模板參數的一些基本概念,讓大家對這方面的內容有一個更加深入的了解。

我認為C++非類型類模板參數相當于一個全局常量的角色。書中舉了下面的例子來說明非類型的類模板。這一章通過重新定義一個Stack模板,要求使用一個固定大小的數組作為元素的容器,并且數組的大小可以由模板的使用者自己定義。那么,對于模板的設計者,就應該提供一個接口使得使用者可以定義數組的大小。這就需要用到非類型的類模板參數。下面的代碼能很好的解釋這個問題:

  1. #include < iostream> 
  2. #include < string> 
  3. #include < cstdlib> 
  4. #include < stdexcept> 
  5. template< typename T, int MAXSIZE> 
  6. class Stack{  
  7. private:  
  8. T elems[MAXSIZE];  
  9. int numElems;  
  10. public:  
  11. Stack();  
  12. void push(T const&);  
  13. void pop();  
  14. T top() const;  
  15. bool isEmpty() const{  
  16. return numElems == 0;  
  17. }  
  18. bool isFull() const{  
  19. return numElems == MAXSIZE;  
  20. }  
  21. };  
  22. template< typename T, int MAXSIZE> 
  23. Stack< T, MAXSIZE>::Stack():numElems(0)  
  24. {  
  25. // 不作任何事,僅為了初始化numElems。  
  26. }  
  27. template< typename T, int MAXSIZE> 
  28. void Stack< T, MAXSIZE>::push(T const& elem)  
  29. {  
  30. if(numElems == MAXSIZE)  
  31. {  
  32. throw std::out_of_range("Stack< >::push()==>stack is full.");  
  33. }  
  34. elems[numElems] = elem;  
  35. ++numElems;  
  36. }  
  37. template< typename T, int MAXSIZE> 
  38. void Stack< T, MAXSIZE>::pop()  
  39. {  
  40. 47 if(numElems < = 0)  
  41. {  
  42. throw std::out_of_range("Stack< >::pop: empty stack");  
  43. }  
  44. --numElems;  
  45. }  
  46. template< typename T, int MAXSIZE> 
  47. T Stack< T, MAXSIZE>::top()const  
  48. {  
  49. if(numElems)  
  50. {  
  51. throw std::out_of_range("Stack< >::pop: empty stack");  
  52. }  
  53. // 返回***一個元素。  
  54. return elems[numElems - 1];  
  55. }  
  56. int main()  
  57. {  
  58. try  
  59. {  
  60. Stack< int, 20> int20Stack;  
  61. Stack< int, 40> int40Stack;  
  62. Stack< std::string, 40> stringStack;  
  63. int20Stack.push(7);  
  64. std::cout< < "int20Stack.top() : "< < int20Stack.top()< < std::endl;  
  65. int20Stack.pop();  
  66. stringStack.push("HelloWorld!");  
  67. std::cout< < "stringStack.top() : "< < stringStack.top()< < std::endl;  
  68. stringStack.pop();  
  69. stringStack.pop();  
  70. }  
  71. catch(std::exception const& ex)  
  72. {  
  73. std::cerr< < "Exception: "< < ex.what()< < std::endl;  
  74. return EXIT_FAILURE;  
  75. }  
  76. return 0;  

上面的代碼揭示了C++非類型類模板參數的定義和使用方法。

【編輯推薦】

  1. C++類模板特化基本概念概述
  2. C++類模板應用代碼深入剖析
  3. C++數組參數應用方式探討
  4. C++獲取當前路徑實現技巧分享
  5. C++反射機制具體實現方法詳解
責任編輯:曹凱 來源: 博客園
相關推薦

2010-02-04 13:56:24

C++類模板特化

2010-02-01 10:54:37

C++框架

2010-02-03 11:11:18

C++類型轉換

2010-02-02 13:41:01

C++類繼承

2010-02-05 17:34:37

C++函數模板

2010-02-04 15:05:00

C++ cpuid指令

2010-02-04 17:39:48

C++字符串類型

2010-02-03 13:22:07

C++時間

2010-02-05 12:57:20

C++ kdevelo

2010-02-02 10:33:22

C++引用

2010-02-04 14:22:25

C++函數模板非類型參

2010-02-01 17:24:41

C++循環語句

2010-02-03 14:36:47

C++仿函數

2010-02-02 15:30:05

C++ include

2010-02-23 17:55:24

WCF雙向通信

2009-12-07 14:53:13

PHP抽象類應用

2010-02-01 14:07:12

C++多態性

2010-02-06 14:04:58

C++內存使用機制

2010-02-04 10:08:00

C++靜態成員函數

2010-02-03 17:42:33

C++模板參數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲 一区 | 亚洲精品乱码久久久久久按摩观 | 青草青草久热精品视频在线观看 | 国产精品免费大片 | 国产清纯白嫩初高生在线播放视频 | 999精品视频 | 亚洲成人黄色 | 日本成人中文字幕 | 91精品中文字幕一区二区三区 | 日韩在线视频一区二区三区 | 黄色成人免费看 | 成人日批视频 | 久久精品视频播放 | 欧美亚洲国产日韩 | 日韩中文字幕一区二区三区 | 91麻豆精品国产91久久久更新资源速度超快 | av在线一区二区 | 一级片在线观看视频 | 国产免费拔擦拔擦8x高清 | 天天射天天干 | japan25hdxxxx日本| 成人av免费在线观看 | 欧美日韩在线免费观看 | 国产精品久久久久aaaa九色 | 亚洲精品视频一区 | 免费看a | 欧美在线视频一区二区 | aaa级片 | 久久久久久九九九九九九 | 日本精品一区二区三区在线观看视频 | 中文字幕亚洲区一区二 | 久久久久久国模大尺度人体 | 欧美亚洲第一区 | 国产欧美在线一区 | 国产高清视频一区 | 亚洲一区视频在线 | www.久久.com | 国产亚洲成av人片在线观看桃 | 青青草国产在线观看 | 精品一区二区三区在线观看国产 | 一区二区三区免费 |