//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. JMeter 各组件介绍以及用法

    录制脚本 常用组件 参数化 关联

  2. Grid Virtual Server 和 网格计算

    Grid Virtual Server 的 Virtual Server 源于 LVS (Linux Virtual Server) , LVS 的意思就是把 多个 Linux 服务器 联合起来构成一 ...

  3. attr()、prop()、css() 的区别

    .attr( ) 可以设置元素的属性(也就是给元素新增加一个原来并不存在的属性)也可以获取元素的本来就有的属性以及额外设置的属性.如果要获取的属性没有设置,那么获取到的结果是 undefined; . ...

  4. 多wan示意图

    此时计算机的网关可以任意选择其中的一台路由器的ip地址.

  5. DRP端口描述

    DRP端口描述 1.信息来源 2.端口描述

  6. FIFO IP核仿真

    FIFO IP核仿真 1.FIFO IP核配置 2.FIFO测试逻辑代码 首先往FIFO里面写入512个数据(FIFO深度的一半),然后再开始同时往FIFO里面写入,读出数据.FIFO读和写的时钟域不 ...

  7. 写了一个RenderInBackground的脚本

    某主管希望write节点有多线程渲染的功能,而nuke中的render in background功能恰恰可以多个渲染任务同时执行,于是我考虑使用这个方法来实现. 调 试过程中发现renderinba ...

  8. 【mysql】ICP下mysql执行计划的一次解析

    mysql版本 [root@xxxx]# mysql --version mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using ...

  9. PyQt训练BP模型时,显示waiting动图(多线程)

    1.实现效果 2.相关代码 实现BP训练模型的线程类 class WorkThread(QtCore.QThread): finish_trigger = QtCore.pyqtSignal() # ...

  10. Microsoft Office 2016 简体中文 Vol 版镜像下载

    在使用上,零售版和批量授权版并没有区别,只是授权方式方面的区别,相对而言,VOL 版的更容易激活一些,其他并没有什么区别了. 有需要的可以在下面下载:(以下均是 VL 版) 版本:Office 201 ...