C ++通过某个类的派生类阻止两个类的多重继承

时间:2013-06-14 23:21:47

标签: c++ inheritance private multiple-inheritance

有点冗长的标题,但这里有:

我有一种情况,我想阻止两个类由同一个类或一个族的任何类派生。在代码中:

    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的私人成员要从任何派生类中保持私密的情况,而友谊会破坏该设计。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

如果没有真正深入了解,它看起来像是一个典型的问题,过去常常使用静态(编译时解析)多态来解决。 这种框架的基本方法是CRTP元编程模式(仅仅因为您为继承类引入了一个强大的策略,可以使用或组合父类/基类)。

了解如何提供

  • type traits(在C ++ 11标准符合性之前,有一些lib可用于支持此功能)
  • 概念检查(几个lib支持此功能,例如boost::concept_check
  • SFINAE和/或显式(编译时)错误条件

您可以考虑使用各种离散客户端帮助程序(API)类来聚合最终类的接口实现;这是指将某些实现隐藏在编译单元中,最终隐藏必要的工厂以创建具体实例。