预设模板自变量

原创 2017年01月03日 17:28:06

一、预设模板自变量的示例代码

你可以针对  class templates 定义其  template parameters 的默认值 , 这称为  default template arguments (预设模板自变量)。预设自变量值甚至可以引用前一步声明的   template parameters。例如在前面博客中提到的class Stack<>  中,你可以把「用来容纳元素」的容器类型定义为第二个template parameter,并使用std::vector<>  作为其默认值: 


#include <vector> 
#include <stdexcept> 
 
template <typename T, typename CONT = std::vector<T> > 
class Stack { 
private: 
CONT elems; //  元素 


public: 
void push(T const&); // push 元素

 
void pop(); // pop 元素 


T top() const; //  传回  stack 的顶端元素 


bool empty() const { // stack 是否为空 
return elems.empty(); 

}; 
 
template <typename T, typename CONT> 
void Stack<T,CONT>::push (T const& elem) { 
elems.push_back(elem);   //  追加元素 

 
template <typename T, typename CONT> 
void Stack<T,CONT>::pop() { 
if (elems.empty()) { 
throw std::out_of_range("Stack<>::pop(): empty stack"); 

elems.pop_back(); //  移除最后一个元素 

 
template <typename T, typename CONT> 
T Stack<T,CONT>::top() const { 
if (elems.empty()) { 
throw std::out_of_range("Stack<>::top(): empty stack"); 

return elems.back(); //  传回最后一个元素的拷贝 


二、使用预设模板自变量

你可以像面对「单一template parameter」版本那样地使用这个新版stack。这时如果你只传递一个自变量表示元素类型,stack会使用预设的vector来管理其内部元素:

 
template <typename T, typename CONT = std::vector<T> > 
class Stack { 
private: 
CONT elems; //  元素  
... 
}; 
 
当你在程序中声明一个Stack  object时,也可以明确指定元素容器的类型: 


#include <iostream> 
#include <deque> 
#include <cstdlib> 
#include "stack3.hpp" 
 
int main() { 

try { 
// stack of ints 
Stack<int> intStack; 
 
// stack of doubles,其内部使用  std::deque<>  来管理元素 
Stack<double,std::deque<double> > dblStack; 
//注:千万不要声明为  Stack<double, std::deque<int> >, 
//  这是自己砸自己的脚,编译器无法为你做些什么。 
 
//  操控  int stack 
intStack.push(7); 
std::cout << intStack.top() << std::endl; 
intStack.pop(); 
 
//  操控  double stack 
dblStack.push(42.42); 
std::cout << dblStack.top() << std::endl; 
dblStack.pop(); 
dblStack.pop(); 


} catch (std::exception const& ex) { 
std::cerr << "Exception: " << ex.what() << std::endl; 
return EXIT_FAILURE; //  以错误状态码离开程序 


那么,只要像下面这样做: 
Stack<double,std::deque<double> > 
你就声明了一个  double  stack,其内部以  std::deque<>  来管理元素。
 

版权声明:本文为博主原创文章,未经博主允许不得转载。

模板参数 自变量推导

一、基本概念 Function templates 有两种参数:  1. Template parameters(模板参数),在function template 名称前的一对角(尖)括号中声明:...
  • wangdamingll
  • wangdamingll
  • 2017年01月03日 11:46
  • 133

搜索框 phpcms 简单

{loop $sData $v} {$v[title]} 【内容导读】{str_cut($v[description],360)} ...
  • amnotsuperior
  • amnotsuperior
  • 2015年09月02日 17:07
  • 569

2016.12.05回顾 logistic自变量是分类变量

1、又看了下joinquant,按财务指标选股的时候不加filler似乎可以挑选出全部A股的股,但是奇怪的是有个停牌(或者说已经退市的)出现在了名单之中(300372欣泰电气),是12月2号的数据,然...
  • strwolf
  • strwolf
  • 2016年12月06日 13:55
  • 336

Prefab - 预设体

预设体是一个游戏对象及其组件的集合,目的是使游戏对象及资源能够被重复使用,相同的游戏对象可以通过一个预设体来创建,此过程可以理解为实例化 对预设体进行修改后,所有游戏对象都会相应改变 把一个游戏对...
  • Memoryuuu
  • Memoryuuu
  • 2016年12月27日 20:57
  • 249

“未能恢复-无效的自变量”的解决方法

下载的DMG安装文件,是不能直接用来恢复到U盘的。 打开磁盘工具,选择u盘,点恢复,点映像,选择你下载的dmg文件后,在左侧菜单的下面会出现你选择的映像文件,这时候双击该文件,比如:MAC OS...
  • sbvfhp
  • sbvfhp
  • 2012年09月13日 17:32
  • 6551

未能恢复-无效的自变量“的解决方法 (GUID分区)LION

如果用自己制作的 Lion 安装光盘安装的话,开机的时候按住 C 键就可从光盘引导;如果使用 U 盘安装的话,开机的时候按住 option 键就可以从 U 盘引导。 下载的DMG文件,在映像中选...
  • love_hot_girl
  • love_hot_girl
  • 2012年10月10日 13:49
  • 2169

Unity中预设体的创建(mac机)

Perfab可以理解为是一个游戏对象及其组件的集合,目的是使游戏对象及资源能够被重复使用。通过预设体来创建对象的过程可以理解为实例化。  预设体的创建过程如下: 1、打开菜单栏中的Assets--...
  • u013238823
  • u013238823
  • 2015年03月03日 22:22
  • 760

Unity3d 开发(四)代码创建预设

我们在使用编辑器时会有需求使用代码创建预设。在Unity3d的编辑器接口中,有`PrefabUtility`类可以使用它来创建预设。这篇文章简介了如何使用,并封装了一个更智能的函数...
  • fansongy
  • fansongy
  • 2015年09月25日 23:36
  • 5735

如何利用遗传算法进行自变量降维

如何利用遗传算法进行自变量降维 GAOT工具箱下载地址:http://download.csdn.net/download/lsgo_myp/9721624乳腺癌数据集下载地址:http://down...
  • LSGO_MYP
  • LSGO_MYP
  • 2016年12月26日 21:42
  • 835

Unity开发详解之预设体(6/6)

前边我们创建了一个静止的敌人,现在我们给它基本的行动能力,障碍检测能力 脚本 WanderingAI using System.Collections; using System.Collection...
  • d276031034
  • d276031034
  • 2017年02月20日 17:29
  • 427
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:预设模板自变量
举报原因:
原因补充:

(最多只允许输入30个字)