1

我的课是这样的:

class FB_I {
  public:
    virtual void foo() = 0;
    virtual void bar() = 0;
};

class TEE_I {
  public:
    virtual void tee() = 0;
};

class C: public FB_I, public TEE_I {
  public:
    virtual void foo();
    virtual void tee();
};

现在我意识到 foo() 和 bar() 实际上并不是完全独立的,foo() 必须在 bar() 之前调用。

鉴于以下情况,我想知道处理此问题的最佳解决方案是什么:

  1. 我不想在 C::foo() 和 C::tee() 中添加逻辑来捕捉乱序调用。
  2. 我可以将该解决方案用作处理另一种情况的模式,foo() 和 bar() 是替代 API:当一个被调用时,另一个不应该被调用。
4

1 回答 1

2

使用模板方法,有时也称为非虚拟接口

struct FB_I {
    void baz() {
        foo();
        bar();
    }
private:
    virtual void foo() = 0;
    virtual void bar() = 0;    
};
于 2013-05-15T22:33:06.440 回答