有点冗长的标题,但这里有:
我有一种情况,我想阻止两个类由同一个类或一个族的任何类派生。在代码中:
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的私人成员要从任何派生类中保持私密的情况,而友谊会破坏该设计。我怎么能这样做?
答案 0 :(得分:2)
如果没有真正深入了解,它看起来像是一个典型的问题,过去常常使用静态(编译时解析)多态来解决。 这种框架的基本方法是CRTP元编程模式(仅仅因为您为继承类引入了一个强大的策略,可以使用或组合父类/基类)。
了解如何提供
boost::concept_check
)您可以考虑使用各种离散客户端帮助程序(API)类来聚合最终类的接口实现;这是指将某些实现隐藏在编译单元中,最终隐藏必要的工厂以创建具体实例。