rendered paste bodyclass ObjInterface1;
class ObjInterface2;
class ObjFullInterface;
class Obj2Interface1;
class Obj2Interface2;
class Obj2FullInterface;
class BaseObj
{
};
class Obj : public BaseObj
{
public:
ObjInterface1* GetInterface1() { return (ObjInterface1*)this; }
ObjInterface2* GetInterface2() { return (ObjInterface2*)this; }
ObjFullInterface* GetFullInterface() { return (ObjFullInterface*)this; }
};
class ObjInterface1 : public BaseObj
{
public:
void I1_AFunc() {}
};
class ObjInterface2 : public BaseObj
{
public:
void I2_AFunc() {}
};
class ObjFullInterface : public ObjInterface1, public ObjInterface2
{
};
class BaseObj2 : public BaseObj
{
};
class Obj2 : public BaseObj2
{
public:
Obj2Interface1* GetInterface1() { return (Obj2Interface1*)this; }
Obj2Interface2* GetInterface2() { return (Obj2Interface2*)this; }
Obj2FullInterface* GetFullInterface() { return (Obj2FullInterface*)this; }
};
class Obj2Interface1 : public BaseObj2, public ObjInterface1
{
public:
void I1_BFunc() {}
};
class Obj2Interface2 : public BaseObj2, public ObjInterface2
{
public:
void I2_BFunc() {}
};
class Obj2FullInterface : public Obj2Interface1, public Obj2Interface2
{
};
void Test()
{
Obj *obj = (Obj*)new ObjFullInterface;
obj->GetInterface1()->I1_AFunc();
Obj2 *obj2 = (Obj2*)new Obj2FullInterface;
obj2->GetInterface1()->I1_BFunc();
}