//file max.hpp

template <typename T>

//template<class T>

inline T const& max (T const& a,T const& b)

{

return a<b?b:a;

}

//file max.cpp

#include <iostream>

#include <string>

#include "max.hpp"

int main()

{

int i = 42;

std::cout<<"max(7,i):"<<::max(7,i)<<std::endl;

double f1 = 3.4;

double f2 = 6.7;

std::cout<<"max(f1,f2):"<<::max(f1,f2)<<std::endl;

std::string s1 = "mathematics";

std::string s2 = "math";

std::cout<<"max(s1,s2):"<<::max(s1,s2)<<std::endl;

}

//out

max(7,i):42

max(f1,f2):6.7

max(s1,s2):mathematics

/*******/

max(4,7) //OK

msx(4,4.2) //error

有三种方法解决:

1:对实参进行强制类型转化,使他们可以相互匹配

  max(static_cast<double>(4),4.2)

2:显示指定(或者限定)T的类型

  max<double>(4,4.2)

3:指定两个参数可以具有不同的类型

  template<typename T1,typename T2>

inline T1 max(T1 const& a,T2 const& b)

  {

    return a<b?b:a;

  }

//解决返回类型的问题

template <typename T1,typename T2,typename RT>

inline RT max(T1 const& a,T2 const& b);

...

max<int,double,double>(4,4.2)//ok 但是麻烦

/*****/

template <typename RT,typename T1,typename T2>

inline RT max(T1 const& a,T2 const& b)

...

max<double>(1.4,2)

C++ Templates编程(模板参数)的更多相关文章

  1. C++ Templates(1.3 多模板参数 Multiple Template Parameters)

    返回完整目录 目录 1.3 多模板参数 Multiple Template Parameters 1.3.1 为返回类型设置模板参数参数 Template Parameters for Return ...

  2. 《深入实践C++模板编程》之三——模板参数类型详解

    非类型模板参数 和 模板型模板参数 整数以及枚举类型:指向对象或者函数的指针:对对象或函数的引用:指向对象成员的指针.统称为非类型模板参数. 模板型模板参数,是指模板参数还可以是一个模板.   1.整 ...

  3. C++ 变长模板参数

    转载自: http://www.cnblogs.com/liyiwen/archive/2013/04/13/3018608.html C++11 语言核心的改进中,最为关注的有 rvalue ref ...

  4. 对C++ templates类模板的几点补充(Traits类模板特化)

    前一篇文章<浅谈C++ templates 函数模板.类模板以及非类型模板参数>简单的介绍了什么是函数模板(这个最简单),类模板以及非类型模板参数.本文对类模板再做几点补充. 文章目录1. ...

  5. AJAX编程模板

    AJAX一直以来没怎么接触,主要是做JSON数据在服务器和客户端之间传递的时候,被玩坏了,对它莫名的不可爱,最近心理阴影小了,于是又来看看它....... AJAX即“Asynchronous Jav ...

  6. 读书笔记 effective c++ Item 44 将与模板参数无关的代码抽离出来

    1. 使用模板可能导致代码膨胀 使用模板是节省时间和避免代码重用的很好的方法.你不需要手动输入20个相同的类名,每个类有15个成员函数,相反,你只需要输入一个类模板,然后让编译器来为你实例化20个特定 ...

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

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

  8. 缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename

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

  9. STL的map容器将第3个模板参数设为less_equal或greater_equal会怎样?

    最近都在学Linux系统编程,用C就足矣,有段时间没碰C++了,于是实现些算法练手. 实现多项式乘法的时候发现有几项没有合并同类项,最终调试到这一步时发现了问题. res是map类型,用find查找k ...

随机推荐

  1. S老师 Top-Down RPG Starter Kit 学习

    character creation using UnityEngine; using System.Collections; public class CharacterCreation : Mon ...

  2. 创建表时,主键 USING BTREE、USING HASH 的含义(待补充)

    PRIMARY KEY (`id`) USING BTREE

  3. Request method 'POST' not supported

    总是报错,原来是form表单的锅,赶紧删了.

  4. MySQL数据库分区操作【RANGE】

    客服平台,线上查询存在性能问题,为了解决或者说是缓解这个问题,除了加必要的索引,另外就是将表进行分区. 这里主要是针对既有的表进行分区,采用的是alter table xxx的方式,当然,也可以采用c ...

  5. 5V与3.3V电平互转

    参考: http://blog.sina.com.cn/s/blog_7880f98301014fmj.html

  6. php限制文件下载速度的代码

    有时候你会出于某种目的而要求把下载文件的速度放慢一些,例如你想实现文件下载进度条功能.限制下载速度最大的好处是节省带宽,避免瞬时流量过大而造成网络堵塞.本文将和你分享如何通过php代码来实现限制文件的 ...

  7. EXPLAIN执行计划中要重点关注哪些要素

    MySQL的EXPLAIN当然和ORACLE的没法比,不过我们从它输出的结果中,也可以得到很多有用的信息. 总的来说,我们只需要关注结果中的几列: 列名 备注 type 本次查询表联接类型,从这里可以 ...

  8. MySQL 内存溢出

    select EVENT_NAME ,SUM_NUMBER_OF_BYTES_ALLOC from memory_summary_global_by_event_name order by SUM_N ...

  9. mysql 闪回原理

    利用MySQL闪回技术恢复误删除误更改的数据 笔者相信很多人都遇到过忘带where条件或者where条件漏写了一个和写错了的情况,结果执行了delete/update后把整张表的数据都给改了.传统的解 ...

  10. Oracle Split字符串

    为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...