一、成员模板的概念
类模板中有个member,它自己也是一个 template,就叫成员模板
二、示例代码
class Base1{};
class Derived1:public Base1 {};
class Base2{};
class Derived2:public Base2 {};
template<class T1, class T2>
struct pair
{
typedef T1 first_type;
typedef T2 second_type;
T1 first;
T2 second;
pair() : first(T1()), second(T2()) {}
template<class U1, class U2>
pair(const pair<U1, U2>& p)
: first(p.first), second(p.second) { }
};
template<typename T>
class shared_ptr
{
public:
template<typename Tp1>
explicit shared_ptr(Tp1 *ptr)
: px(ptr) { }
private:
T* px;
};
void test_member_template()
{
//父类的 pair p2 里面能放置子类的对象。
pair<Derived1, Derived2> p;
pair<Base1, Base2> p2(p);
//父类的指针指向子类对象
Base1 *ptr = new Derived1; //up-cast
shared_ptr<Base1> sptr(new Derived1);//模拟//up-cast
}