3.1.9崭新的Template特性

Variadic Template 可变参数模板

void print()
{
} template <typename T, typename… Types>
void print (const T& firstArg, const Types&… args)
{
std::cout<<firstArg<<std::endl;
print(args);
}

如上,如果传人1或多个实参,上述的function template就会被调用,区分第一个实参,允许第一实参被打印,然后递归调用print()并传入其余实参。必须提供一个nontemplate重载函数print(),才能结束整个递归动作。

Alias Template 带别名的模板

template <typename T>

using Vec = std::vector<T,MyAlloc<T>>;

后,可以这样声明:

Vec<int> coll;

reference wrapper

官方的解释是这样的:

Reference wrapper

Class that emulates a reference to an element of type T, but which can be copied (it is both copy-constructible and copy-assignable).

实例:

std::vector<std::reference_wrapper<Item>> books;  // elements are references

Item f("Faust",12.99);
books.push_back(f); // insert book by reference

for (const auto& book : books) {
    std::cout << book.get().getName() << ": "
    << book.get().getPrice() << std::endl;
  }

注意book.get().getName(),循环体中book被声明为处理“类型为Item&”的元素,用它直接调用成员函数前要调用get()。

C++11开始支持数组的begin和end,具体用法为:

int ia[]={,,,,,,,};
int *b=begin(ia);
int *e=end(ia);

C++11的一些新特性的更多相关文章

  1. (数据科学学习手札139)geopandas 0.11版本重要新特性一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...

  2. kafka 幂等生产者及事务(kafka0.11之后版本新特性)

    1. 幂等性设计1.1 引入目的生产者重复生产消息.生产者进行retry会产生重试时,会重复产生消息.有了幂等性之后,在进行retry重试时,只会生成一个消息. 1.2 幂等性实现1.2.1 PID ...

  3. RAC 11.2的新特性

    网格即插即用(GPnP) 网格即插即用帮助管理员来维护集群,以前增加或删除节点需要的一些手动操作的步骤现在可以由GPnP来自动实现. GPnP不是一个单独的概念,它依赖于以下特性:在一个XML配置文件 ...

  4. Mysql8.0.11简介,新特性

    MySQL 8.0 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 注意:从 MySQL 5.7 升级到 MySQL 8 ...

  5. jdk 9 10 11 12 13 新特性

    jdk 9 新特性 1.集合加强 jdk9 为所有集合(List/Set/Map)都增加了 of 和 copyOf 方法,用来创建不可变集合,即一旦创建就无法再执行添加.删除.替换.排序等操作,否则将 ...

  6. C# 11 的这个新特性,我愿称之最强!

    前言 在日常开发中我们经常会将JSON.XML.HTML.SQL.Regex等字符串拷贝粘贴到我们的代码中,而这些字符串往往包含很多的引号",我们就必须将所有引号逐个添加转义符\进行转义.这 ...

  7. C++11的模板新特性-变长参数的模板

    这个特性很赞,直接给例子吧,假如我要设计一个类,CachedFetcher内部可能使用std::map也可能使用std::unordered_map,也可能是其它的map,怎么设计呢?没有C++11变 ...

  8. C++11 带来的新特性 (4)—— 匿名函数(Lambdas)

    1 语法 Lambdas并不是新概念,在其它语言中已经烂大街了.直接进入主题,先看语法: [ captures ] ( params ) specifiers exception attr -> ...

  9. C++11/14的新特性——更简洁

      新的字符串表示方式——原生字符串(Raw String Literals) C/C++中提供了字符串,字符串的转义序列,给输出带来了很多不变,如果需要原生义的时候,需要反转义,比较麻烦. C++提 ...

随机推荐

  1. MFC和Direct3D9一起使用

    第一步:新建MFC单文档项目,向导如下: 第二步:添加引用,在项目属性的VC++目录中修改Include和lib文件夹. 第三步:在stdafx.h文件Include部分的最后添加如下引用. #inc ...

  2. [QT]抄—影像显示实验

    QtCreator新建一个Qt Application,命名为ImageView 在项目文件夹下添加gdal库,统一放在ImageView\gdal目录下. 右键单击项目,选择添加库命令,添加gdal ...

  3. Vue.2.0.5-生产环境部署

    删除警告 为了减少文件大小,Vue 精简独立版本已经删除了所有警告,但是当你使用 Webpack 或 Browserify 等工具时,你需要一些额外的配置实现这点. Webpack 使用 Webpac ...

  4. 使用Html来避免写复杂的app代码,跨平台

    http://www.jianshu.com/p/c375ac056149 http://www.php.net.cn/app/

  5. 算法-KMP串匹配

    字符串匹配 http://www.cnblogs.com/jingmoxukong/p/4343770.html 模式匹配是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串 ...

  6. json数据传输有感

    必须把object对象o给JSON.stringify(o) json字符串化 传到后台 前台js的对象某属性如果是Array  那后台就是Long[] idsArray  这种bean的属性对应 然 ...

  7. eclipse Project facet Java version 1.8 is not supported.

    在移植eclipse项目时,如果遇到 “Project facet Java version 1.7 is not supported.” 项目中的jdk1.7不支持.说明项目是其他版本jdk编译的, ...

  8. C++Primer 第一章

    /* 1.main函数的标准写法就只有两种,一种是带命令行的,一种是不带命令行的.其返回类型必须是int. 2.如果main函数最后没有return语句,则编译器会自动加上一句 return 0; * ...

  9. SQL 数据库 触发器 、事务

    触发器类型有两种: 1.AFTER(FOR)触发器 在动作执行之后触发(增删改执行完成后,触发器中的代码再执行),不能为视图指定for触发器,只能为表指定该触发器. 2.instead of触发器 可 ...

  10. android命令安装apk时报错:INSTALL_FAILED_CPU_ABI_INCOMPATIBLE

    点击下载Genymotion-ARM-Translation.zip 将你的虚拟器运行起来,将下载好的zip包用鼠标拖到虚拟机窗口中,出现确认对跨框点OK就行.然后重启你的虚拟机.