2009-08-13 2 views
-1

나는 단일 및 다중 스레드 구현에 대해 궁금합니다.비 - 가상 인터페이스 패턴은 C++에서 어떻게 구현됩니까?

감사

+0

당신이 말하는 것에 대해 궁금합니다. 예를 들어 좀더 자세하게 설명해 줄 필요가 있습니다. –

+1

Neil에 추가하려면 싱글 대 멀티 쓰레드 구현의 의미가 확실하지 않습니다. NVI는 스레딩과 관련이 없으므로 단일/다중 스레드 NVI의 차이점은 실제로 어떤 클래스의 단일/다중 스레드 구현 간의 차이와도 다르지 않습니다. –

+0

@Nick 그 남자는 사소한 C++ 스팸 - 페스트에 빠져있는 것 같습니다. 나는 그가 그 자신의 질문을 이해하는지 의심 스럽다. –

답변

3

귀하의 질문은 모호하지만, 당신이 원하는 것처럼 그것은 소리 Curiously recurring template pattern

나는에 이것을 설명하는 것보다 훨씬 더 사람들이있다 웹 그것은 부스트 ​​라이브러리에서 많이 사용됩니다. boost.iterator 좋은 예제를위한 문서와 코드

2

Effective C++ (3rd Edition) 사본이있는 경우 Scott Meyers는 Item 35 (170 페이지)의 NVI 관용구를 훌륭하게 취급합니다.

+0

예, 있습니다. 나는 한번 살펴 보겠다. thx – vehomzzz

2
class base 
{ 
public: 
    void bar() 
    { 
     getReady(); 
     barImpl(); 
     cleanup(); 
    } 
    void getReady() {cout << "Getting ready. ";} 
    void cleanup() {cout << "Cleaning up.\n";} 
protected: 
    virtual void barImpl() {cout << "base::barImpl. ";} 
} 

class derived : public base 
{ 
protected: 
    virtual void barImpl() {cout << "derived::barImpl. ";} 
} 

int main() 
{ 
    base b; 
    derived d; 
    b.bar(); 
    d.bar(); 
} 

출력 :

Getting ready. base::barImpl. Cleaning up. 
Getting ready. derived::barImpl. Cleaning up. 
+0

코드 샘플은 항상 멋지지만 몇 가지 설명이 있습니다. –

+0

가상의 경우 보호됩니다. 비공식은? – vehomzzz

+0

개인은 괜찮지 만 의미 체계가 다소 혼란 스럽기 때문에 많은 책에서 가상 기능을 권장하지 않습니다. – rlbond

관련 문제