member template成员模板笔记----C++学习之路

来源:互联网 发布:淘宝成功之处 编辑:程序博客网 时间:2024/06/03 03:27

  1.所谓成员模板,模板中有个member,它本身也是一个template,就叫做成员模板。

  2.例子:

template <class T1, class T2>struct pair{    typedef T1 first_type;    typedef T2 second_type;    T1 first;    T2 second;    pair()        :first(T1()), second(T2()) {}    pair(const T1& a ,const T& b)        :first(a),second(b) {}    template<class U1, class U2>    pair(const pair<U1,U2>& p)        :first(p.first),second(p.second) {}};
在模板上T1 T2在变换过程中,如果已经固定,那么在成员中U1 U2又能变换。

  3.

class Base1{};class Derived1:public Base1{};class Base2{};class Derived2:public Base2{};
假设有这些类的继承关系。
pair<Derived1,Derived2> p;pair<Base1 ,Base2> p2(p);
这样就是拿T1 T2来制作一个p。

第二行就是那两个父类来做成一个p2。

这样我们是否能够拿这两个子类放到一个由父类构成的pair中作为初值。

pair<Base1,Base2> p2(pair<Derived1,Derived2>());
但是如果Derived1 和Derived2反了的话就会失败。
  4.另一种例子的成员模板:

template<typename _Tp>class shared_ptr:public __shared_ptr<_Tp>{    ...    template<typename _Tp1>    explicit shared_ptr(_Tp1* __p)        :__shared_ptr<_Tp>(__p){}    ....};
所以,当智能指针类型十个父类,new了一个子类,这是可以的。
Base1* ptr = new Derived1; //up-castshared_ptr<Base1> sptr(new Derived1);
也就是说,当我们指向一个人类的父类,那么指向女人也是可以的。




阅读全文
0 0
原创粉丝点击