STL萃取学习

一,萃取模板类实现

iterator类:模板常用属性的集合类,其他类只需要集成该类即可。本例为学习就只包括value_type属性。

iterator_traits类:属性萃取类。

/***********************************Author:szyu**Date:2017.3.1***************************************/#ifndef__SZYU_ITERATOR__#define__SZYU_ITERATOR__template<typenameT>classiterator_traits{public:typedeftypenameT::value_typevalue_type;};template<typenameT>classiterator{public:typedefTvalue_type;};#endif

/********************************Author:szyu**Date:2017.3.1*************************************/#ifndef__SZYU_HEAD__#define__SZYU_HEAD__#include"iterator.h"template<typenameT>classTest:publiciterator<T>{};template<typenameT>typenameiterator_traits<T>::value_typefunction(intnum1,intnum2){std::cout<<"Traitsfunctionint."<<std::endl;returnnum1+num2;}template<typenameT>typenameiterator_traits<T>::value_typefunction(doublenum1,doublenum2){std::cout<<"Traitsfunctiondouble."<<std::endl;returnnum1+num2;}#endif

二,测试用例

/***************************Author:szyu**Date:2017.3.1***********************************/#include<iostream>#include"head.h"voidtest1(){intv1=function<Test<int>>(1,2);std::cout<<"v1="<<v1<<std::endl;doublev2=function<Test<double>>(1.1,2.2);std::cout<<"v2="<<v2<<std::endl;}intmain(intargc,char*argv[]){test1();return0;}

三,测试结果

Traitsfunctionint.v1=3Traitsfunctiondouble.v2=3.3