我有以下条件:继承这两个抽象基接口和它的实现提供C2259
的absract基类许多纯虚函数:
interface IBase
{
virtual void foo1() = 0;
virtual void foo2() = 0;
virtual void foo3() = 0;
virtual void foo4() = 0;
virtual void foo5() = 0;
// ...
virtual void fooN() = 0;
};
两个小接口继承它:
版-A:
interface IBaseExt_A :
public IBase
{
virtual void foo_A() = 0;
};
版-B:
interface IBaseExt_B :
public IBase
{
virtual void foo_B() = 0;
};
我创建一个实现所有的IBase
接口函数的基类:
class CBase :
public IBase
{
public:
virtual void foo1() { /* Do something... */}
virtual void foo2() { /* Do something... */}
virtual void foo3() { /* Do something... */}
virtual void foo4() { /* Do something... */}
virtual void foo5() { /* Do something... */}
// ...
virtual void fooN() { /* Do something... */}
};
现在,我要实现这两个衍生版本,最少的代码。
我希望做一些事情,如:
class CBaseExt_A :
public IBaseExt_A,
public CBase
{
public:
virtual void foo_A() { /* Do something... */}
};
显然,这给了错误:
C2259: 'CBaseExt_A': cannot instantiate abstract class...
这些错误指的是所有IBase
接口功能。
我知道我可以通过委派所有IBase
功能CBase
执行很长的路要走解决它:
class CBaseExt_A :
public IBaseExt_A,
public CBase
{
// IBase implementation:
public:
virtual void foo1() { CBase::foo1();}
virtual void foo2() { CBase::foo2();}
virtual void foo3() { CBase::foo3();}
virtual void foo4() { CBase::foo4();}
virtual void foo5() { CBase::foo5();}
// ...
virtual void fooN() { CBase::fooN();}
// IBaseExt_A implementation:
public:
virtual void foo_A() { /* At last - do what we came here for...*}
};
但是这让我小班CBaseExt_A
变得大而复杂。
有没有办法如何避免所有这些手动委派编码?
非常感谢,PAZO
虚拟继承可能会有所帮助。 – Jarod42
C++中的接口关键字?你使用什么编译器? –
@KirillKobelev - 我添加了:#define interface struct – PazO