【发布时间】:2013-06-14 23:21:47
【问题描述】:
有点冗长的标题,但这里是:
我有一种情况,我想防止两个类被同一个类或一个家族的任何类派生。在代码中:
class A;
class B;
class C: public A; //Yes.
class D: public B; //Yes.
class E: public A, public B; //Yes.
class F: public C, public B; //Yes.
class G: public A /*Disallow inheritance of B at this point somehow*/;
class H: public G, public B; //Error at this point...
class I;
class J: public G, public I; //...but not at this point.
在这种情况下,A 和 B 的私有成员对任何派生类都保持私有,而友谊会破坏这种设计。我怎么能做到这一点?
【问题讨论】:
-
你在解决什么问题?这个设计是解决方案?
-
您应该考虑模板化接口、类型特征和概念检查来解决此类问题。接口实现可能会作为模棱两可的错误消息发生冲突。
-
@GManNickG 我正在制作一个模拟 DAW 中使用的概念的实时音频库 - 我有两个抽象类 Input 和 Output,然后我有另一个抽象类 AudioSource,它是类的模板生成音频输出但不接受输入(如正弦波发生器或音频文件)。如果我偶然(或其他人)同时派生了 AudioSource 和 Input,那将违反类的定义(并且可能会在未来产生一些不良影响)。我可以把它记录下来,但如果我能强行阻止它发生就更好了。
-
@g-makulik 我认为模板可能会解决这个问题,但结果会有点令人困惑,除非我能以某种方式将它隐藏在 cpp 中。 boost 是否已经制作了类似的东西?
-
@user2228070:我明白了。也许一个类可以同时是
Input和Output提供者?对这样的事情进行建模可能没有意义,但我认为想要禁止它可能不是一个基本问题。
标签: c++ inheritance private multiple-inheritance