C++面向对象编程分享08----20160422_李楚煌

假设有个计算类Calculator,它要处理int, long, float, double等数值类型。
用模板实现GetLimit()方法,获得每种类型的数值的上限LIMIT,
比如int的上限是100,long的上限是1000,float的上限是999.99,double的上限是888.8888888等等。

#include <iostream>
using namespace std;

struct Calculator {
    template<typename T> T GetLimit() 
		{ return T(97); }
};

template<> int Calculator::GetLimit()  
	{ return int(100); }
template<> long Calculator::GetLimit()  
	{ return long(1000); }
	
template<> float Calculator::GetLimit()  
	{ return float(999.99); }
	
template<> double Calculator::GetLimit()  
	{ return double(888.888888); }

int main() {
    Calculator cal;
    
    cout << "Limit-int : " << cal.GetLimit<int>() << endl;
    cout << "Limit-long : " << cal.GetLimit<long>() << endl;
    cout << "Limit-float : " << cal.GetLimit<float>() << endl;
    cout << "Limit-double : " << cal.GetLimit<double>() << endl;
    cout << "Limit-char : " << cal.GetLimit<char>() << endl;
    
    return 0;
}
这段代码看上去简单,用了template模板,

实际上它还想表达一种trait技巧。

模板也有自己的属性,我们称之为trait,而模板内部的操作逻辑称之为policy,即算法策略,

算法策略在最近大火的机器学习中起到核心作用,五道口有位学生用汇编写出了flappy bird,还能机器学习,着实厉害。

https://www.zhihu.com/question/29669428/answer/95783764

据他所言,定义一个行为矩阵,如果没死就给奖励,死了就给惩罚;

这样随着每一次决策,它都会进一步优化这个矩阵。

这即是算法策略中的一种。

举例说明模板trait:

#include <iostream>
using namespace std;
    
template<typename T>
    T Accumulate(T const* begin, T const* end) {
        T sum = T();
        while (begin != end) {
            sum += *begin;
            begin++;
        }
        return sum;
}
    
int main() {
    int test[10] = {1,2,3,4,5,6,7,8,9,10};
    int r = Accumulate(test,test + 10);
    printf("r is %d\n",r); 
    return 0;
}
从上面的例子可以看出,这东西称之为traits有点玄乎,实际上就是函数拉。


traits简单的分享先到这,有读者想深入学习可以参考:

http://en.cppreference.com/w/cpp/types

或者侯捷老师的

http://jjhou.boolan.com/programmer-6-type-traits-ddj.htm






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值