C++ Templates编程(模板参数)
//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编程(模板参数)的更多相关文章
- C++ Templates(1.3 多模板参数 Multiple Template Parameters)
返回完整目录 目录 1.3 多模板参数 Multiple Template Parameters 1.3.1 为返回类型设置模板参数参数 Template Parameters for Return ...
- 《深入实践C++模板编程》之三——模板参数类型详解
非类型模板参数 和 模板型模板参数 整数以及枚举类型:指向对象或者函数的指针:对对象或函数的引用:指向对象成员的指针.统称为非类型模板参数. 模板型模板参数,是指模板参数还可以是一个模板. 1.整 ...
- C++ 变长模板参数
转载自: http://www.cnblogs.com/liyiwen/archive/2013/04/13/3018608.html C++11 语言核心的改进中,最为关注的有 rvalue ref ...
- 对C++ templates类模板的几点补充(Traits类模板特化)
前一篇文章<浅谈C++ templates 函数模板.类模板以及非类型模板参数>简单的介绍了什么是函数模板(这个最简单),类模板以及非类型模板参数.本文对类模板再做几点补充. 文章目录1. ...
- AJAX编程模板
AJAX一直以来没怎么接触,主要是做JSON数据在服务器和客户端之间传递的时候,被玩坏了,对它莫名的不可爱,最近心理阴影小了,于是又来看看它....... AJAX即“Asynchronous Jav ...
- 读书笔记 effective c++ Item 44 将与模板参数无关的代码抽离出来
1. 使用模板可能导致代码膨胀 使用模板是节省时间和避免代码重用的很好的方法.你不需要手动输入20个相同的类名,每个类有15个成员函数,相反,你只需要输入一个类模板,然后让编译器来为你实例化20个特定 ...
- 从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename
一.缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: temp ...
- 缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename
一.缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: temp ...
- STL的map容器将第3个模板参数设为less_equal或greater_equal会怎样?
最近都在学Linux系统编程,用C就足矣,有段时间没碰C++了,于是实现些算法练手. 实现多项式乘法的时候发现有几项没有合并同类项,最终调试到这一步时发现了问题. res是map类型,用find查找k ...
随机推荐
- S老师 Top-Down RPG Starter Kit 学习
character creation using UnityEngine; using System.Collections; public class CharacterCreation : Mon ...
- 创建表时,主键 USING BTREE、USING HASH 的含义(待补充)
PRIMARY KEY (`id`) USING BTREE
- Request method 'POST' not supported
总是报错,原来是form表单的锅,赶紧删了.
- MySQL数据库分区操作【RANGE】
客服平台,线上查询存在性能问题,为了解决或者说是缓解这个问题,除了加必要的索引,另外就是将表进行分区. 这里主要是针对既有的表进行分区,采用的是alter table xxx的方式,当然,也可以采用c ...
- 5V与3.3V电平互转
参考: http://blog.sina.com.cn/s/blog_7880f98301014fmj.html
- php限制文件下载速度的代码
有时候你会出于某种目的而要求把下载文件的速度放慢一些,例如你想实现文件下载进度条功能.限制下载速度最大的好处是节省带宽,避免瞬时流量过大而造成网络堵塞.本文将和你分享如何通过php代码来实现限制文件的 ...
- EXPLAIN执行计划中要重点关注哪些要素
MySQL的EXPLAIN当然和ORACLE的没法比,不过我们从它输出的结果中,也可以得到很多有用的信息. 总的来说,我们只需要关注结果中的几列: 列名 备注 type 本次查询表联接类型,从这里可以 ...
- MySQL 内存溢出
select EVENT_NAME ,SUM_NUMBER_OF_BYTES_ALLOC from memory_summary_global_by_event_name order by SUM_N ...
- mysql 闪回原理
利用MySQL闪回技术恢复误删除误更改的数据 笔者相信很多人都遇到过忘带where条件或者where条件漏写了一个和写错了的情况,结果执行了delete/update后把整张表的数据都给改了.传统的解 ...
- Oracle Split字符串
为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...