模板参数 自变量推导

原创 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。 


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

c++模板参数自动推导

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

无法从“WCHAR [260]”为“std::_Vb_iterator<_Sizet,_Difft,_MycontTy>”推导 模板 参数

WIN32_FIND_DATA wfd; .... std::string filename=file_PathName.substr(0,file_PathName.find_last_of...

字符串参数的模板函数推导问题

You are here: Home » 计算机 » 编程 » 字符串参数的模板函数推导问题 字符串参数的模板函数推导问题 2009-10-06 国庆长假期间又翻了...

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

C++模板的强大,不得不让人佩服,STL和BOOST两大库,居然建立在其基础上,作为一个要学好C++的同学,了解一下不犯戒的。下面是转的文章: http://blog.csdn.net/shineh...

图说函数模板右值引用参数(T&&)类型推导规则(C++11)

图说函数模板右值引用参数(T&&)类型推导规则(C++11) 见下图: 规律总结: 只要我们传递一个基本类型是A④的左值,那么,传递后,T的类型就是A&,形参在函数体中的类型就是...

Traits 编程技法+模板偏特化+template参数推导+内嵌型别编程技巧

STL中,traits编程技法得到了很大的应用,了解这个,才能一窥STL奥妙所在。 先将自己所理解的记录如下: Traits技术可以用来获得一个 类型 的相关信息的。 首先假如有以下一个泛型的迭代器类...

模板模板参数推导例子

#include  "stdafx.h" #include   using namespace std;   template void f1(T*) { cout } template voi...

C++17尝鲜:类模板中的模板参数自动推导

模板参数自动推导在C++17之前,类模板构造器的模板参数是不能像函数模板的模板参数那样被自动推导的,比如我们无法写std::pair a{1, "a"s}; // C++17而只能写std::pair...
  • zwvista
  • zwvista
  • 2017年10月29日 12:14
  • 99

stl模板编程模板参数推导

之前一直未仔細看STL中的一些源碼,每次看都覺得頭疼,因為感覺裏面的很多句子都晦澀難懂,最近在看boost,感覺還是得知難而進,不然看不下去。 關於主題,首先看STL中的一個函數std::mem_f...
  • rekrad
  • rekrad
  • 2012年05月31日 10:25
  • 652
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模板参数 自变量推导
举报原因:
原因补充:

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