2013-05-15 3 views
1

에 염기 서열 또는 교대 로직을 추가하는 방법을 내 클래스는 다음과 같이 있습니다)클래스 디자인 : API

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는()와 바 (실현 실제로는 완전히 독립적이지, foo는()이 있어야합니다 bar() 전에 호출됩니다.

  1. 나는 C에서 논리를 추가하지 않으 :: foo는()와 C :: 티() 순서가 잡으려고 :

    나는 다음이 주어진 처리하는 가장 좋은 솔루션입니다 궁금해 부름.

  2. 솔루션을 다른 케이스를 처리하기위한 패턴으로 사용할 수 있습니다. foo() 및 bar()는 대체 API입니다. 하나가 호출 될 때 다른 하나는 호출되지 않아야합니다.
+0

는 어떻게 잡을 것인가? 기능이 있더라도 내부적으로 그렇게 할 것입니다. 또한 올바른 가상 기능으로 바를 무시하는 위치가 없습니다. 적절하게 작성된 문서를 제공하여 두 시나리오를 처리해야합니다. – Etherealone

답변

2

때때로로 알려진 Template Method을 사용하십시오 Non-Virtual Interface : 뭔가가 호출 여부를 그 논리를 추가하지 않고 경우

struct FB_I { 
    void baz() { 
     foo(); 
     bar(); 
    } 
private: 
    virtual void foo() = 0; 
    virtual void bar() = 0;  
}; 
+0

+1 또 다른 방법은 foo()와 bar()를 적절한 로직으로 정의하고 각각 doFoo()와 doBar()를 호출하도록하는 것입니다. – Brady