文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++非类型类模板参数的基本概念是什么

2023-06-17 16:56

关注

C++非类型类模板参数的基本概念是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

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

我认为C++非类型类模板参数相当于一个全局常量的角色。书中举了下面的例子来说明非类型的类模板。这一章通过重新定义一个Stack模板,要求使用一个固定大小的数组作为元素的容器,并且数组的大小可以由模板的使用者自己定义。那么,对于模板的设计者,就应该提供一个接口使得使用者可以定义数组的大小。这就需要用到非类型的类模板参数。下面的代码能很好的解释这个问题:

#include < iostream> #include < string> #include < cstdlib> #include < stdexcept> template< typename T, int MAXSIZE> class Stack{  private:  T elems[MAXSIZE];  int numElems;  public:  Stack();  void push(T const&);  void pop();  T top() const;  bool isEmpty() const{  return numElems == 0;  }  bool isFull() const{  return numElems == MAXSIZE;  }  };  template< typename T, int MAXSIZE> Stack< T, MAXSIZE>::Stack():numElems(0)  {  // 不作任何事,仅为了初始化numElems。  }  template< typename T, int MAXSIZE> void Stack< T, MAXSIZE>::push(T const& elem)  {  if(numElems == MAXSIZE)  {  throw std::out_of_range("Stack< >::push()==>stack is full.");  }  elems[numElems] = elem;  ++numElems;  }  template< typename T, int MAXSIZE> void Stack< T, MAXSIZE>::pop()  {  47 if(numElems < = 0)  {  throw std::out_of_range("Stack< >::pop: empty stack");  }  --numElems;  }  template< typename T, int MAXSIZE> T Stack< T, MAXSIZE>::top()const  {  if(numElems)  {  throw std::out_of_range("Stack< >::pop: empty stack");  }  // 返回***一个元素。  return elems[numElems - 1];  }  int main()  {  try  {  Stack< int, 20> int20Stack;  Stack< int, 40> int40Stack;  Stack< std::string, 40> stringStack;  int20Stack.push(7);  std::cout< < "int20Stack.top() : "< < int20Stack.top()< < std::endl;  int20Stack.pop();  stringStack.push("HelloWorld!");  std::cout< < "stringStack.top() : "< < stringStack.top()< < std::endl;  stringStack.pop();  stringStack.pop();  }  catch(std::exception const& ex)  {  std::cerr< < "Exception: "< < ex.what()< < std::endl;  return EXIT_FAILURE;  }  return 0;  }

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

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯