先看一个简单的接口方式实现的委托
#include <iostream>
using namespace std;
class I //iterface
{
public:
virtual void f()=0;
virtual void g()=0;
};
class A:public I
{
public:
void f()
{
cout<<"A::f()"<<endl;
}
void g()
{
cout<<"A::g()"<<endl;
}
};
class B:public I
{
public:
void f()
{
cout<<"B::f()"<<endl;
}
void g()
{
cout<<"B::g()"<<endl;
}
};
class C:public I
{
private:
I *m_i;
public:
C()//构造函数
{
m_i=new A();
}
void f()
{
m_i->f();
}
void g()
{
m_i->g();
}
void toA()
{
m_i=new A();
}
void toB()
{
m_i=new B();
}
};
int main()
{
C cc=C();
cc.f();
cc.g();
cc.toB();
cc.f();
cc.g();
}
运行结果:
A::f()
A::g()
B::f()
B::g()
接下来要做的事情是把该例程优化为带模板的委托,这样才能通用;
参考文章:http://www.cnblogs.com/zplutor/archive/2011/09/17/2179756.html