一种在C++中强制使用接口的方法

Ken*_*enK 5 c++ interface

在C++中,假设我有一个Derived实现接口类的类BaseInterface,其中BaseInterface只有纯虚函数和虚析构函数:

class BaseInterface
{
  public:
    virtual void doSomething() = 0;
    ~BaseInterface(){}
};

class Derived : public BaseInterface
{
  public:
    Derived() {}
    ~Derived(){}

  protected:
    virtual void doSomething();

  private:
    int x;
};
Run Code Online (Sandbox Code Playgroud)

Derived类层次结构之外的类不应该Derived::doSomething()直接调用,即,只应通过BaseInterface类以多态方式访问它.为了执行这条规则,我已经取得了Derived::doSomething()保护.这很好用,但我正在寻找关于这种方法的意见/赞成.

谢谢!

Mar*_*k B 9

我认为您正在寻找非虚拟接口(NVI)模式:一个public非虚拟接口,它调用受保护或私有virtual实现:

class BaseInterface
{
  public:
    virtual ~BaseInterface(){}
    void doSomething() { doSomethingImpl(); }

protected:
    virtual void doSomethingImpl() = 0;
};

class Derived : public BaseInterface
{
  public:
    Derived() {}
    virtual ~Derived(){}

  protected:
    virtual void doSomethingImpl();

  private:
    int x;
};
Run Code Online (Sandbox Code Playgroud)