自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

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

  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. // 返回***一個(gè)元素。  
  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++非類型類模板參數(shù)的定義和使用方法。

【編輯推薦】

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

2010-02-04 13:56:24

C++類模板特化

2010-02-01 10:54:37

C++框架

2010-02-03 11:11:18

C++類型轉(zhuǎn)換

2010-02-02 13:41:01

C++類繼承

2010-02-05 17:34:37

C++函數(shù)模板

2010-02-04 15:05:00

C++ cpuid指令

2010-02-04 17:39:48

C++字符串類型

2010-02-02 10:33:22

C++引用

2010-02-03 13:22:07

C++時(shí)間

2010-02-05 12:57:20

C++ kdevelo

2010-02-04 14:22:25

C++函數(shù)模板非類型參

2010-02-02 15:30:05

C++ include

2010-02-03 14:36:47

C++仿函數(shù)

2010-02-01 17:24:41

C++循環(huán)語句

2010-02-01 14:07:12

C++多態(tài)性

2010-02-06 14:04:58

C++內(nèi)存使用機(jī)制

2010-02-04 10:08:00

C++靜態(tài)成員函數(shù)

2010-02-03 17:42:33

C++模板參數(shù)

2010-02-23 17:55:24

WCF雙向通信

2009-12-07 14:53:13

PHP抽象類應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)