1

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

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

    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 的私有成员对任何派生类都保持私有,而友谊会破坏这种设计。我怎么能做到这一点?

4

1 回答 1

2

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

看看如何提供

  • 类型特征(在符合 C++11 标准之前,有一些库可以支持这一点)
  • 概念检查(几个库支持这一点,例如boost::concept_check
  • SFINAE和/或显式(编译时)错误条件

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

于 2013-06-15T00:23:45.727 回答