C++非类型类模板参数基本概念正确理解

C++编程语言已经出现就立即引起了开发人员的注意,它具有C语言的所用功能,并能支持许多程序设计风格。我们今天要为大家介绍的则是C++非类型类模板参数的一些基本概念,让大家对这方面的内容有一个更加深入的了解。

我们提供的服务有:网站设计、成都网站制作、微信公众号开发、网站优化、网站认证、正安ssl等。为上1000家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的正安网站制作公司

我认为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;
  77. }

上面的代码揭示了C++非类型类模板参数的定义和使用方法。

新闻标题:C++非类型类模板参数基本概念正确理解
网页链接:http://www.shufengxianlan.com/qtweb/news28/504628.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联