C++template--函数模版

//max.hpp
template <typename T>
inline T const& max(T const &a,T const &b)
{
	return a>b?a:b;
}

template <typename T>
inline T const& min(T const &a,T const &b)
{
	return a>b?b:a;
}

inline int const& max(int const &a,int const &b)//非模版的函数可以和一个同名的函数模版同时存在,而且该函数模版还可以被实例化为这个非模版函数
{
	//std::cout<<"调用非模版"<<std::endl;         //对于非模版函数和同名的函数模版,如果条件都是相同的话,那么在调用的时候,重载解析通常调用非模版
	return a>b?a:b;
}

template <typename T>
inline T const& max(T const &a,T const &b,T const &c)
{
	return ::max(::max(a,b),c);
}


//main.cpp
#include<iostream>
#include<string>
#include"max.hpp"
#include"max2.hpp"

using namespace std;

//模版在实例化前,先检查模版本身,查看语法是否正确,这里会发现错误的语法,例如漏写;
//在实例化期间,检查模版代码,查看是否所有的调用都有效,这里会发现无效的调用,,例如实例化类型不支持某些函数调用

int main()
{
	//使用模版
	int i=42;                       
	cout<<"max(7,42):"<<::max(7,i)<<endl;//max()模版每次调用之前都有域限定符::,这是为了确认我们调用的是全局名字空间的max(),
	                                     //因为标准库也有一个std::max()模版,在某些情况下可以被使用,因此有时会产生二义性 
	
	cout<<"max(7.2,42):"<<::max<int>(7.2,42)<<endl;//用int实例化T

	double f1=3.4,f2=-5.2;
	cout<<"max(f1,f2):"<<::max(f1,f2)<<endl;

	string s1="math";
	string s2="lanzhihui";
	cout<<"max(s1,s2):"<<::max(s1,s2)<<endl;

    //重载函数模版
	cout<<"max(4.2,1.2,3.2):"<<::max(4.2,1.2,3.2)<<endl;
	
	string s3="zbc";
	cout<<"max(s1,s2,s3):"<<::max(s1,s2,s3)<<endl;

	system("pause");
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值