#include "memory"
#include "iostream"
class T1
{
public:
void ProcOne() {
std::cout << " ... one ... " << std::endl;
};
} ;
class T2
{
public:
void ProcOne() {
std::cout << " ... two ... " << std::endl;
};
} ;
// class IAdaptor,抽象基类
class IAdaptor
{
public:
virtual void Proc() = 0 ;
} ;
// class Adaptor
template <class T>
class Adaptor : public IAdaptor,private T //实现继承
{
public:
virtual void Proc() { T::ProcOne() ; };
} ;
//以统一方式调用函数Proc,而不关心是T1、T2或其他什么类
template <class T>
void Test(const std::auto_ptr<Adaptor<T>> sp)
{
sp->Proc();
}
int _tmain(int argc, _TCHAR* argv[])
{
Test(std::auto_ptr<Adaptor<T1>>(new Adaptor<T1>));
Test(std::auto_ptr<Adaptor<T2>>(new Adaptor<T2>));
return 0;
}