模板专题(一)函数模板

本系列属于长篇,有兴趣的可以慢慢参看(源于读书笔记和各种资料整理)

解决模板,主要为了C++11中的某些问题做个铺垫

在学习模板之前,首先想到自己的一个问题,有时候需要打印某些调试信息,除了使用一些专业的LOG工具外,一般情况下为了简单方便,就直接使用std::cout,比如

std::cout<<"参数i="<<i<<std::endl;

std::cout<<"消息值="<<msg<<std::endl;

每次写这么一行感觉特别多也烦琐,就想着有没有一个函数,能接受任意参数进行打印呢?当时的想法是这样的,

void g(参数...)

{

  std::cout<<参数<<std::endl;

}

调用的时候,直接使用g(实参)来调用,这样就可以省了很多语句。但是由于每种类型都不同,如果要实现这种功能,需要函数重载很多次,那么有没有一种万能类型,用一个函数对应所有可能呢?
模板的意义就出现了,模板可以实现一对多。下面正式进入主题。

函数模板

首先说模板,就像工厂的模具一样,我们认为它是【虚】的,虚的概念在程序设计中也许是高境界,虚可以对应一切。例如,void *,我记得从前有篇博客是这样写的,void *就好比人,而int *,char *等实际类型可以认为是男人和女人,
那么可以说,男人和女人是人,但是人不是男人和女人,因此,int*可以直接转化为void*,翻译过来就是男人是人。这段表达让我一直以来记忆犹新,写的非常棒。

那么回到模板,模板也是一种的概念,对于函数模板来说,它代表一个函数家族。也就是说,一种类型可以泛化出各种类型。这是函数模板的初步认识,它是虚的。



模板专题(一)函数模板

原文地址:https://www.cnblogs.com/tinaluo/p/12000098.html

时间: 2024-11-11 06:43:47

模板专题(一)函数模板的相关文章

模板专题:函数模板

第一个例子:比较两个数值的大小(整型.浮点型等) template<class T> T TSWAP(T a, T b) { return a > b ? a : b; } int main() { cout << TSWAP(9, 20) << endl; /*cout << TSWAP<int>(9, 20) << endl;*//*也可行;*/ cout << TSWAP(9.5, 6.3) <<

C++ 函数模板一(函数模板定义)

//函数模板定义--数据类型做参数 #include<iostream> using namespace std; /* 函数模板声明 1.函数模板定义由模板说明和函数定义组成,并且一个模板说明对应一个函数定义 2.模板说明的类属参数必须在函数定义中至少出现一次 3.函数参数表中可以使用类属类型参数,也可以使用一般类型参数 */ /* template关键字告诉c++编译器现在要进行泛型编程 typename或者class告诉c++编译器T是一个数据类型,不要进行语法检查 typename和c

忍不住吐槽类模板、模板类、函数模板、模板函数

最近在查资料,发现了一些blog上写"类模板.模板类.函数模板.模板函数的区别"之类的文章.一看之下,闭起眼睛想想,自己写了这么久C++,知道模板,知道函数,也知道类.如果单独问我,类模板或者模板类,我都认为是采用了模板的类.但不知道这"类模板.模板类.函数模板.模板函数"是什么东西. 仔细看了下文章,忍不住吐槽了.其实就是采用模板的类叫类模板,实例化后叫模板类.采用模板的函数叫函数模板,实例化后叫模板函数.好吧,你赢了.知道模板的都会知道,模板实例化后会由编译器生

C++模板学习:函数模板、结构体模板、类模板

C++模板:函数.结构体.类 模板实现 1.前言:(知道有模板这回事的童鞋请忽视) 普通函数.函数重载.模板函数 认识. //学过c的童鞋们一定都写过函数sum吧,当时是这样写的: int sum(int a,int b) { return a+b; } //实现了整数的相加 //如果再想同时实现小数的相加,就再多写个小数的相加.普通实现我就不写了,知道函数重载的童鞋们会这样写: int sum(int a,int b) {//第一个function return a+b;} double su

C++ 函数模板二(函数模板重载)

//函数模板重载 #include<iostream> using namespace std; /* 函数模板会进行严格的类型匹配,模板类型不提供隐式类型转化 普通函数能够进行自动类型转换 */ /* 函数模板重载四大规则 1 函数模板可以像普通函数一样被重载 2 C++编译器优先考虑普通函数 3 如果函数模板可以产生一个更好的匹配,那么选择模板 4 可以通过空模板实参列表的语法限定编译器只通过模板匹配 */ template<typename T> void Test1(T a

类模板、模板类、函数模板、模板函数

一:什么是类模板 一个类模板允许用户为类定义一种模式,使得类中的某些数据成员.默认成员函数的参数.某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的) 如果一个类中数据成员的数据类型不能确定.或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的.实际的类,而是代表一类类. 二:类模板定义及注意事项 template<class 模板参数表> 或者template<typename 模板参数表> class 类名 { /

【C++】模板简述(二):函数模板

我们上文讲了,模板的引入,我们发现在某种特殊的情况下,必须得通过模板才能完美的解决问题. 本文就来简述一下函数模板的基本使用. 一.函数模板格式 template<typename Param1, typename Param2,...,class Paramn> 返回值类型 函数名(参数列表){ ... } 二.函数模板的实例 //T表示类型,具体是什么不知道,实例化的时候才知道 //typename可以用class代替,但推荐使用typename //注意:typename不能用struc

【C/C++学院】(11)泛型编程/函数模板/类模板

1.泛型编程基础 #include "iostream" using namespace std; void swap(int &a, int &b) { int c; c = a; a = b; b = c; } void swap(float &a, float &b) { float c; c = a; a = b; b = c; } void main() { int a = 1, b = 2; swap(a, b); float a1 = 1,

函数模板与类模板

函数模板,顾名思义,是在生成函数时依照的模板. 有时,我们需要对不同的数据类型做同样的函数操作. 比如:分别对一个int类型数 和 一个double类型数求平方. 这时,虽然都是同样的求平方操作(函数体内代码一样),但是我们必须要编写两个不同的函数,因为处理int类型的函数的参数和返回值类型都应该是int,而处理double类型的函数的参数和返回值都应该是double. 如下:函数体内操作代码一样,设计为重载函数,用相同的函数名,但是参数类型和返回值类型却都不一样,函数需要定义两次. int S

类模板和函数模板

函数模板: 函数模板全特化:所谓特化,是指相对普通模板的特化,是另外一个模板.但不是实例,只是模板 template <class T>                                      //普通函数模板,泛型T mymax(const T t1, const T t2){   return t1 < t2 ? t2 : t1;} template <>const char* mymax(const char* t1,const char* t2)