c++模板两个数的加法
来源:互联网 发布:ios日本漫画软件 编辑:程序博客网 时间:2024/05/16 15:33
1、最简单的情况:
template<class T>T Add(const T& a, const T& b){return a + b;}
缺点是不能够处理不同类型的数据,例如Add(100, 100.0f);
2、第二种情况:
template<typename T1, typename T2>T1 Add1(T1 lhs, T2 rhs){return lhs + rhs;}
这种情况下,能够处理不同类型的数据,但是有些情况下有些数据精度会丢失,例如:Add(100, 100.1f)
3、第三种情况:
这种是根据第二种情况的改良,因为第二种会丢失数据精度主要是因为无法判断两个数据类型的精度,从而确定返回值的类型,利用模板trait技巧,我们可以实现。
template<bool T,class T1, class T2>class IfThenElse;template<typename T1, typename T2>class IfThenElse<true, T1, T2>{public:typedef T1 ResultT;};template<typename T1, typename T2>class IfThenElse<false, T1, T2>{public:typedef T2 ResultT;};template<typename T1, typename T2>class ReturnValueTrait{public:typedef typename IfThenElse<(sizeof(T1) > sizeof(T2)), T1, T2>::ResultT ResultT;};//因为int和float类型所占的字节相同,所以无法通过比较大小来判断类型的精度,需要偏特化template<>class ReturnValueTrait<float, int>{public:typedef float ResultT;};template<>class ReturnValueTrait<int, float>{public:typedef float ResultT;};template<typename t1, typename t2>typename ReturnValueTrait<t1, t2>::ResultT Add(T1 lhs, T2 rhs){return lhs + rhs;}
0 0
- c++模板两个数的加法
- C语言位移实现两个数的加法
- 位运算实现两个数的加法
- 浮点数的大数加法模板
- 用C实现模拟图灵机进行两个数的加法运算
- C语言小试牛刀两个初级程序练习------1到100的加法运算,两个数大小的比较
- 大数加法模板(c++)
- c高精度加法模板
- 汇编循环实现两个8字节的数的加法
- 两个类型为字符串的二进制数的加法
- 求两个数的和,但是不能用加法操作。
- 不用算术运算符实现两个数的加法操作
- Java代码 实现两个二进制数的加法
- 用GUI实现求两个数的加法--方法一
- 用GUI实现求两个数的加法--方法二
- 不用算术运算符实现两个数的加法
- 第一个NDK小程序之两个数的加法
- 不用算术运算符实现两个数的加法。
- 计算机网络(5)应用层
- poj 2718 Smallest Difference
- 颠倒的价牌 - 蓝桥杯
- 服务器端配置MySQL
- 请求生命周期回调(Controllers)
- c++模板两个数的加法
- Java对象池
- 用户界面设计的七大法则:给你一个受人欢迎的界面设计
- Codeforces Round #237 (Div. 2) E. Maze 1D
- 软件公司研发职位
- 快速幂&&取余(NYOJ420、105、205)
- 微生物增殖
- poj 3126 Prime Path (bfs+筛素数)
- poj 1258 Agri-Net(最小生成树)