如何理解这个继承问题
template <class Interface>
class InterfaceImpl: public virtual CObjRoot, public Interface
{
};
template <class ThreadModel = CSingleThreaded >
class CComBase : public virtual CObjRoot , public ThreadModel
{
};
class CmyInterface : public CComBase <> , public InterfaceImpl <ImyInterface>
{
};
这个是我网上下载到一段有关COM的代码,大家帮忙看看!
CmyInterface 继承InterfaceImpl <ImyInterface> ,再看InterfaceImpl,继承Interface,而ImyInterface就是模板参数,所以InterfaceImpl也继承自CmyInterface,
这样是不是形成了一个循环继承, 不知道我这样理解有没有错,这段代码是可以通过编译的,而我写了一段模拟循环继承的代码却不能通过,报错:base class undefined
这是我写的代码:
#include <iostream>
using namespace std;
class A;
class B
{
public:
B(){cout < < "This is B " < <endl;}
~B(){cout < < "B is about to deconstruct " < <endl;}
};
class C: public B,public A
{
public:
C(){cout < < "This is C " < <endl;}
~C(){cout < < "C is about to deconstruct " < <endl;}
};
class A: public C
{
public:
A(){cout < < "This is A " < <endl;}
~A(){cout < < "A is about to deconstruct " < <endl;}
};
int main()
{
A a;
return 0;
}
[解决办法]
class CmyInterface : public CComBase <> , public InterfaceImpl <ImyInterface>
CmyInterface ==》ImyInterface