设为首页 加入收藏

TOP

C++非类型模板参数(一)
2014-04-06 17:36:08 来源: 作者: 【 】 浏览:228
Tags:类型 模板 参数

  对于函数模板与类模板,模板参数并不局限于类型,普通值也可以作为模板参数。在基于类型参数的模板中,你定义了一些具体的细节来加以确定代码,直到代码被调用时这些细节才被真正的确定。但是在这里,我们面对的是这些细节是值,而不是类型,当要使用基于值的模板时,必须显式地指定这些值,才能够对模板进行实例化。

  在上篇文章(C++类模板)中我们介绍了一个stack类模板作为例子,下面将看一个新版本的stack模板,来叙述本文将要介绍的特性:

  非类型的类模板参数

  创建类的头文件

  #include

  #include

  using namespace std;

  template

  class Stack{

  private:

  T elems[MAXSIZE];

  int numElems;

  public:

  Stack();

  void push(T const&);

  void pop();

  T top() const;

  bool empty() const {

  return numElems == 0;

  }

  bool full() const {

  return numElems == MAXSIZE;

  }

  };

  template

  Stack::Stack():numElems(0) {}

  template

  void Stack::push(T const& elem)

  {

  if(numElems == MAXSIZE) {

  throw out_of_range("Stack<>::push(): stack is full");

  }

  elems[numElems] = elem;

  ++numElems;

  }

  template

  void Stack::pop()

  {

  if(numElems <= 0) {

  throw out_of_range("Stack<>::pop(): stack is full");

  }

  --numElems;

  }

  template

  T Stack::top() const

  {

  if(numElems <= 0) {

  throw out_of_range("Stack<>::top(): stack is full");

  }

  return elems[numElems - 1];

  }

  stack4.h

  实现代码:

  #include

  #include

  #include

  #include

  #include

  #include

  #include "stack4.h"

  using namespace std;

  int main()

  {

  try {

  Stack int20Stack;

  Stack int40Stack;

  Stack stringStack;

  int20Stack.push(7);

  cout<

  int20Stack.pop();

  stringStack.push("hello");

  cout<

  stringStack.pop();

  stringStack.pop();

  }

  catch(exception const& ex) {

  cerr<<"Exception: "<

  //return EXIT_FAILURE;

  }

  cin.get();

  return 0;

  }

  main

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++的const类成员函数 下一篇结构体自动化转为char数组

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)