C++函数模板非类型参数的使用介绍

  • 圣才学习网·IT类
  • 2012-03-24 09:44
  • 阅读2270次
  • [大] [中] [小]
扫码手机阅读

用圣才电子书APP或微信扫一扫,在手机上阅读本文,也可分享给你的朋友。

我要分享

  • 微信好友
  • 新浪微博
  • QQ好友
  • QQ空间
  • 腾讯微博

评论(0)

C++编程语言中的模板应用是一个非常重要的应用技术,我们曾经通过多篇文章对此进行过详细的介绍。那么今天我们就先来了解一下有关C++函数模板非类型参数的一些基本概念,方便大家理解。
C++函数模板非类型参数主要用来为函数提供一个运算常量。关于非类型的函数模板参数,书中有下面的例子:
1. //函数模板定义 
2. template<typename T, int VAL>
3. T addValue(T const& x) 
4. { 
5. return x + VAL; 
6. } 
7. //其他代码 
8. //函数模板的使用 
9. std::transform(source.begin(), source.end(), dest.begin(), 
10. (int(*) (int const&))addValue<int, 5>);
上面的代码中定义了一个函数模板,目的是对传入的参数加上一个指定的int型的5。这样的函数被普遍的使用在对一组数据进行同一处理的场合。例如,12行。这里需要注意的是:一std::transform函数本身就是一个模板函数,它的最后一个参数可以传递一个函数指针。
因此,(int(*) (int const&))addValue<int, 5>其实是一个指向实例化后的addValue<T, int VAL>模板函数的指针。至于这个指针怎么读,还请高手指教。另外需要注意的一点是,std::transform的最后一个参数不一定要是模板函数,任何函数都可以(关于std::transform的正确理解参考下面的评论)。只是模板函数更合适处理多种类型的数据罢了。
C++函数模板非类型参数的限制。
关于非类型模板参数的限制目前记住它可以是常整型(包括枚举类型)和指向外部连接对象的指针就可以可了。由于历史原因,浮点型不能作为非类型模板的参数;而指针和字符串作为非类型模板的参数是有条件的。我想这与变量的作用范围和生命周期有关吧。书中后面会有比较相信的介绍,就等到时候再细看了。
  来源:网络        作者:不详

C++函数模板非类型参数的使用介绍相关推荐

  1. [转]C++函数模板与模板函数

    1.函数模板的声明和模板函数的生成 1.1函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数. 函数模板 ...

  2. 函数模板、 内联函数

       函数重载就是有相同的函数名但参数的个数或类型不同从而根据不同的参数个数和参数类型来调用相应的方法.    我们发现函数重载只是解决了函数命名的问题,但函数体虽然相同我们还是要重复的写,为了解决这 ...

  3. C++之函数模板、类模板、模板的特化

    目录 1.什么是模板? 2.类模板的定义如下: 3.模板分类? 1.模板参数有两种: 2.模板的类型 1.函数模板 2.类模板 4.模板实例化 5.模板实现链栈 1.C语言版 2.C++版本 1.什么 ...

  4. 重载函数与函数模板(转)

    原文地址:http://www.jizhuomi.com/software/45.html hello,everyone,鸡啄米上一节讲到的是函数的参数传递和内联函数,这一讲鸡啄米会给大家讲点稍微有点 ...

  5. 【C++基础】模板基础与函数模板

    目录 初识模板 函数模板 函数模板实例化 显式实例化 隐式实例化 初识模板 求两个int.float.char类型的数据的最大值: C里面要这样写: int maxInt(int x, int y); ...

  6. C++函数申明对函数模板实例化的屏蔽

    1.C++函数匹配顺序 C++语言引入模板机制后,函数调用的情形显的比C语言要复杂.当发生一次函数调用时,如果存在多个同名函数,则C++编译器将按照如下的顺序寻找对应的函数定义. (1)寻找一个参数完 ...

  7. Template 基础篇-函数模板

    ====================================================|| 欢迎讨论技术的可以相互加微信:windgs (请备注csdn+xx职业) ======== ...

  8. 利用函数模板技术,写一个简单高效的 JSON 查询器

    JSON可谓是JavaScript的亮点,它能用优雅简练的代码实现Object和Array的初始化.同样是基于文本的数据定义,它比符号分隔更有语义,比XML更简洁.因此越来越多的JS开发中,使用它作为 ...

  9. 什么是模板 为什么使用模板 函数模板

    一.什么是模板 是一种自动生成代码的技术,这种技术能让程序员在编写代码时不需要考虑数据类型,这种技术被称为泛型编程技术 二.为什么使用模板 1.C/C++是一种静态编程语言(预处理->编译-&g ...

最新文章

  1. gitflow分支管理模型
  2. 未能解析引用的程序集……因为它对不在当前目标框架……
  3. 16年寒假随笔(3)
  4. ES6 import代码智能转换Babel插件: babel-plugin-imports-transform
  5. java8 Optional正确使用姿势
  6. MySQL(25)---- ALTER命令
  7. Java基础学习总结(63)——Java集合总结
  8. MOSS 2010:Visual Studio 2010开发体验(23)——编写自定义的BCS连接器
  9. 基于单片机和C语言的毕业设计,毕业论文基于51单片机的C语言程序设计实训100例(1)(喜欢就下吧)...
  10. oracle中distance用法,distance的用法总结大全
  11. spring boot + gateway + nacos 网关统一代理
  12. PHP面试经常被问到的问题(附答案)
  13. python用*号输出字母c的图案_第1.6题:使用Python生成字母验证码图片
  14. solid works土炮模型建模
  15. Vue双向绑定失效 v-model
  16. python3-爬虫-百度新闻结果
  17. 国内PLM用户满意度调研完整版
  18. 一个json传参的错误:JSON parse error: Unrecognized token ‘xxx‘{ “timestamp“: “2022-03-06T16:06:29.866
  19. 全爱科技发布边缘计算主板QA200PCIE
  20. scsi设备驱动体系架构

热门文章

  1. Vegas怎么制作古装墨迹笔刷开场效果
  2. 使用ThreeJs搭建BIM模型浏览器,超大模型的分时渲染
  3. c语言3x3矩阵转置 数组指针 接口(int(※p)[3],int n)
  4. linux tig不支持中文,颠覆 Git 命令使用体验的神器 -- tig
  5. 给未来写封信app服务器维护中,给未来写封信app
  6. python圣斗士修炼(十八):访问mysql数据库
  7. 国内的IT生意,敢问路在何方?
  8. 如何在Java中使用Lambda表达式
  9. 4.1 鸭子类型和多态
  10. 流程引擎之Flowable简介