STL 2: Template的新特性

Template 是 泛型编程和STL中很基本的概念,下面让我们来看看它都有哪些新特性:

1. 类模板显示特化(class template explicit specialization )

    template<class T>

    struct CTest{

          void operator() (){cout<<"CTest<T>"<<endl;}

    };

   

    struct CTest<char>{

         void operator() (){cout<<"CTest<char>"<<endl;}

   } ;

 

    struct CTest<int> {

         void operator() (){cout<<"CTest<int>"<<endl;}

   };

   void main()

   {

         CTest<double> test1;

         CTest<char> test2;

         CTest<int> test3;

 

         test1();

         test2();

         test3();

    }

Answer:

  CTest<T>

  CTest<char>

  CTest<int>

 

 

1.      类模板偏特化(class template partial specialization)

 template<class T1, class T2>

 struct CTest{

  CTest(){cout<<"T1,T2"<<endl;}

 };

 

 template<class T>

 struct CTest<T*, T*>{

 CTest(){cout<<"T*,T*"<<endl;}

};

 

 template<class T>

 struct CTest<const T*, T*>{

 CTest(){cout<<"const T*,T*"<<endl;}

};

 

void main()

{

    CTest<char,int> test1;

    CTest<int*,int*>test2;

    CTest<const int*,int*>test3;

}

Answer:

T1,T2

T*,T*

const T*,T*

 

2.      默认模板参数

根据前一个模板参数T,设定下一个模板参数

 

class alloc{};

template<class T,class Alloc= alloc,size_t BufSize = 0>

class queue{

public:

   queue(){cout<<"queue"<<endl;}

};

 

template<class T, class sequence = deque<T>>

class stack{

public:

    stack(){cout<<"stack"<<endl;}

private:

    sequence s;

};

 

void main()

{

   stack<int> x;

}

Answer:

deque

stack

 

4. 成员模板(member template)

模板类的成员函数可以是一个模板

template<class T>

class vector{

public:

template<class I>

void insert(I first,I last)

{

   cout<<"insert"<<endl;

}

};

int main()

{

   int ia[5]={0,1,2,3,4};

   vector<int>x;

   x.insert(ia,ia+5);

}

Answer:

insert

5.      关键字 typename

做为类型前的标识符号。

指出SubTypeT中定义的一个类型,因此ptr是一个指向T:SubType的指针。

如果不加typename,表达式被认为是T中的静态成员SubTypeptr的乘积。

template<class T>

class MyClass

{

typename T::subType * ptr;

};

C++的一般规则是,除了以typename修饰以外,template内的任何标识符号都被视为一个值(value),而非一个类型(type)。

 

typename的第二个作用:在模板声明中替换关键字class

template<typename T> class MyClass ...

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值