C++函数模板非类型参数应用注意事项总结

开发 后端
C++函数模板非类型参数一般情况下都是用来帮助函数来提供一个运算常量。我们在这篇文章中将会针对这方面的内容进行一个详细介绍。

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函数本身就是一个模板函数,它的***一个参数可以传递一个函数指针。#t#

因此,(int(*) (int const&))addValue<int, 5>其实是一个指向实例化后的addValue<T, int VAL>模板函数的指针。至于这个指针怎么读,还请高手指教。另外需要注意的一点是,std::transform的***一个参数不一定要是模板函数,任何函数都可以(关于std::transform的正确理解参考下面的评论)。只是模板函数更合适处理多种类型的数据罢了。

C++函数模板非类型参数的限制。

关于非类型模板参数的限制目前记住它可以是常整型(包括枚举类型)和指向外部连接对象的指针就可以可了。由于历史原因,浮点型不能作为非类型模板的参数;而指针和字符串作为非类型模板的参数是有条件的。我想这与变量的作用范围和生命周期有关吧。书中后面会有比较相信的介绍,就等到时候再细看了。

责任编辑:曹凯 来源: 博客园
相关推荐

2023-12-13 10:51:49

C++函数模板编程

2024-01-17 23:10:59

C++函数模板开发

2010-02-04 14:01:43

C++非类型类模板参数

2010-01-18 16:12:16

CC++语言

2010-01-14 18:19:40

C++语言

2010-01-25 18:12:28

C++

2011-08-03 11:40:49

布线系统

2010-02-05 17:34:37

C++函数模板

2023-12-24 12:56:14

C++函数语言

2010-01-26 16:54:58

学习C++

2010-01-27 09:12:01

C++语言学习

2010-02-03 16:42:45

C++变量作用域

2024-01-19 21:07:22

C++20Concepts函数

2010-01-20 17:58:54

C++静态成员

2011-06-14 15:25:28

C++多线程

2010-03-01 09:56:21

WCF自定义集合类型

2010-05-31 14:05:51

2010-01-18 14:25:19

使用C++Builde

2009-12-22 09:48:58

WCF枚举类型

2009-09-01 17:25:33

初学C#编程
点赞
收藏

51CTO技术栈公众号