member template成员模板笔记----C++学习之路
2017-11-09 13:08
513 查看
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{};假设有这些类的继承关系。
第二行就是那两个父类来做成一个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了一个子类,这是可以的。
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-cast shared_ptr<Base1> sptr(new Derived1);也就是说,当我们指向一个人类的父类,那么指向女人也是可以的。
相关文章推荐
- template template parameter模板模板参数笔记----C++学习之路
- c++学习笔记之成员模板
- variadic template模板参数可变化----C++学习之路
- 嵌入式开发之C++基础学习笔记5--静态成员,友元,运算符重载,模板,文件流
- C++学习笔记36 (模板的细节明确template specialization)和显式实例(template instantiation)
- C++ - 成员函数(member function)模板(template) 详解 及 代码
- <C++学习笔记>函数模板 template
- C++ - 成员函数(member function)模板(template) 详解 及 代码
- C++学习笔记34——类的static成员
- 金庸小说考试之模板方法模式学习笔记[C++版]
- 【菜鸟C++学习笔记】10.类、对象和成员
- c++学习笔记(十六):函数模板
- C++学习笔记:函数模板
- c++学习笔记(14.函数模板)
- C++ Primer 学习笔记_82_模板与泛型编程 -类模板成员[续二]
- 设计模式C++学习笔记之九(Template Method模板方法模式)
- C++学习笔记_9:类模板
- C++ 函数模板和排序的函数模板——学习笔记
- C++学习笔记12:类成员初始化等问题
- WPF学习笔记(1):样式(Style)与模板(Template)