非类型模板参数
非类型模板参看,顾名思义,模板参数不限定于类型,普通值也可作为模板参数。在基于类型的模板中,模板实例化时所依赖的是某一类型的模板参数,你定义了一些模板参数(template来看一个例子)未加确定的代码,直到模板被实例化这些参数细节才真正被确定。而非类型模板参数,面对的未加确定的参数细节是指(value),而非类型。当要使用基于值的模板时,你必须显式地指定这些值,模板方可被实例化。
template
class Stack
{
public:
Stack():idx(0){}
bool empty() const { return idx == 0;
}
bool full() const { return idx == MAXSIZE;
}
void push(const T&);
void pop();
T& top();
const T& top() const;
private:
int idx;
T elems[MAXSIZE];
}template
void Stack::push(const T& elem)
{
if (full())
throw std::out_of_range("Stack<>::push(): full stack");
elems[idx++] = elem;
}template
void Stack::pop()
{
if (!empty())
idx--;
else
throw std::out_of_range("Stack<>::pop(): empty stack")
}template
T& Stack::top()
{
if (empty())
throw std::out_of_range("Stack<>::top(): empty stack");
return elems[idx-1];
}template
const T& Stack::top() const
{
if (empty())
throw std::out_of_range("Stack<>::top(): empty stack");
return elems[idx-1];
}
【非类型模板参数】使用方法
try
{
Stack int10Stack;
Stack int20Stack;
int20Stack.push(7);
...
}
catch(std::exception& ex)
{
cout << ex.what() << endl;
return EXIT_FAILURE;
}
推荐阅读
- 对称加密和非对称加密的区别
- opencv|opencv C++模板匹配的简单实现
- 病态与非病态的梦中人情结|病态与非病态的梦中人情结 - 草稿
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- 勿说人是非
- web网页模板|如此优秀的JS轮播图,写完老师都沉默了
- 第十六天(请介绍一件让你非常自豪的事情,(不能是职业类的),什么原因感到自豪。)
- mysql|InnoDB数据页结构
- 接口|axios接口报错-参数类型错误解决
- 一定要幸福