模板参数 自变量推导

原创 2017年01月03日 11:46:43

一、基本概念

Function templates 有两种参数: 
1. Template parameters(模板参数),在function template 名称前的一对角(尖)括号中声明: 
template <typename T>              // T  是个  template parameter 


2. Call parameters(调用参数),在  function template 名称后的小(圆)括号中声明: 
... max (T const& a, T const& b); // a  和  b  是调用参数 


二、自变量推导例子

1、一般推导方式

template <typename T1, typename T2> 
inline T1 max (T1 const& a, T2 const& b) {  
   return a < b ? b : a; 

... 
max(4, 4.2); // OK。返回类型和第一自变量类型相同


2、带有函数返回值的推导方式(1)

当template parameters和call parameters之间没有明显联系,而且编译器无法推导出template arameters  时,你必须明确地在调用时指定template arguments。例如你可以为max()引入第三个 template argument type 作为返回类型:

 

template <typename T1, typename T2, typename RT> 
inline RT max (T1 const& a, T2 const& b); 
... 
max<int,double,double>(4, 4.2); 
//  OK,但是相当冗长(译注:因为其实只需明写第三自变量类型,却连前两个自变量类型都得写出来)


3、带有函数返回值得推导方式(2)

另有一种作法是只明确写出第一自变量,剩下的留给编译器去推导,你要做的只
是把所有无法被自动推导出来的自变量类型写出来。


template <typename RT, typename T1, typename T2> 
inline RT max (T1 const& a, T2 const& b); 
... 
max<double>(4,4.2); // OK,返回类型为  double 


此例之中,我们调用  max()时,只明确指出返回类型RT  为double,至于T1  和T2  两个参数类型会被编译器根据调用时的自变量推导为int  和  double。 


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

#include“stdafx.h”详解

1,用VS2008新建项目,选择【Win32】-【Win32控制台应用程序】-输入名称:Test-【确定】   再选【下一步】-默认情况下,我们都是在【空项目】前打上对勾,建立一个纯的C或C++程序...
  • u012102306
  • u012102306
  • 2015年03月24日 23:22
  • 5566

模板参数 自变量推导

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

函数模板使用过程中的问题

在编程过程中需要用到将字符串转换为数字的函数,又应为数字的变量类型又比较多如:int,double等。如何能够用一个函数就解决呢?我就想到了函数模板。实际使用中也出现了问题。先将完成的函数贴上来:#i...
  • BlueCY
  • BlueCY
  • 2017年04月03日 14:14
  • 695

模板参数自动推导

上次,我们看了什么是
  • yincheng01
  • yincheng01
  • 2014年07月11日 12:54
  • 2268

C++——函数模板的参数推导

 在写作泛型函数或代码时,我们可能存在这样的需要:与参数相关的其它类型,比如一个迭代器的值的类型。本文要向大家展示一个函数模板推导机制使用技法,这个在STL的许多排序算法中广泛使用,当然大家也可能在不...
  • shineHoo
  • shineHoo
  • 2010年07月09日 09:16
  • 4160

学习C++模板---模板类带简单参数,并且添加缺省参数,特例模板

模板类不但可以定义类型,还可以定义普通参数类型。在定义类型时,还可以使用缺省参数。虽然模板可以通用,但有时需要进行特别类型的特别对待,这样就需要使用特例模板。下面的模板templateclass CT...
  • caimouse
  • caimouse
  • 2006年12月06日 13:01
  • 2894

从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename

一、缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: tem...
  • Simba888888
  • Simba888888
  • 2013年07月21日 15:10
  • 5334

c++模板参数自动推导

上次,我们看了什么是模板函数,今天,我们就从这个模板函数入手,继而引出一个新的知识点-模板参数自动推导。为了介绍清楚什么是模板参数自动推导,我们先定义几个术语,通过这些术语来描述比较方便,这些术语是:...
  • u010956473
  • u010956473
  • 2017年06月21日 09:12
  • 587

函数模板参数推导的两个经典应用

1.       推导数组参数。【可以分别推导出“元素类型”和“数组长度”】 // 模板函数定义 templateint bound, typename T> void f1( T (&a...
  • feihuadao
  • feihuadao
  • 2014年03月03日 11:10
  • 1116

c++11 条款1:理解模板类型推导

前言 c++98有单独一套类型推导规则:适用用函数模板。c++11修改了这套规则并且增加了两个,一个是auto,一个是decltype。c++14扩展了auto和decltype使用的场景。随着类型推...
  • coolmeme
  • coolmeme
  • 2015年03月03日 15:17
  • 7187
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模板参数 自变量推导
举报原因:
原因补充:

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