多重继承是c++中一种和复杂也很有趣的技术
但如果多接口中有同一个函数,在派生类中继承了这个类,那么多个接口的这个相同的函数的实现是一样的
如果我们需要对不同接口这个函数有不同的实现,怎么办
c++中有种叫做“传递夹层”的技术,就是直接把这两个接口的相同函数都封在派生类中
例如
struct _IArtist:public IArtist
{
STDMETHODIMP Draw(){return ArtistDraw();}
STDMETHODIMP ArtistDraw()=0;
}
struct _ICowboy:public ICowboy
{
STDMETHODIMP Draw(){return CowboyDraw();}
STDMETHODIMP CowboyDraw()=0;
}
如果把对这两个接口的继承,转换成对这个两个封装的类的继承。
那么就有对于同一个函数Draw的两个不同的实现。
但是ATL有个相关的技术叫做“接口着色”
什么是“接口着色”
就是用一个相同内存结构的接口用来替代一个有可能和另一个接口冲突的接口,这个接口
可以使用不同的不同的函数名来代替这个接口,这样就可以避免函数冲突的问题。
有了这个技术可以简单的实现对不同接口但相同函数的不同实现。
说的有点糊涂,但概念很是奇妙。还是那一句,ATL这个东西写的太精妙,让人不得不佩服。