1

사실상 및 기본의 다른 메소드에서 호출 할 수있는 메소드를 설명하는 데 사용되는 용어는 무엇입니까? 나는 콜백 (callback)이라고 불리는 것을 때때로 보았지만, 그 용어의 원래 정의와는 거리가 멀다. 이 장점이 패턴이라고 불리는 것은 확실하지 않지만 코드를보다 정확하게 설명하려고 노력 중입니다. 도와 주셔서 감사합니다!개인 메서드의 개인 재정의? (ANSWER : NVI)

// Abstract class. 
class A { 
public: 
    void run() { while (call()) { /* ... */ } } 
private: 
    virtual bool call() = 0; 
}; 

// Completion/specialization of A. 
class B : public A { 
private: 
    // Standard term to indicate this pattern? 
    bool call(); 
}; 

요약 :이 표시는 비 가상 인터페이스 패턴의 템플릿 메소드 패턴의 특별한 경우라고합니다. 도와 주신 Nick and Steven에게 감사드립니다!

+0

음,'private'이 아닌'protected'를'call'해서는 안됩니까? –

+0

@Steven 및 @Arseny : 비공개 멤버를 재정의 할 수 있습니다. 여기에는 '사적'이어야합니다. –

+0

@Billy : 당신은 틀리지는 않지만, 여전히 나에게 약간의 트윗을 안겨줍니다. –

답변

3

"비 가상 인터페이스"(또는 NVI) 패턴이라고도합니다. 가상 함수의 구현이 파생 클래스간에 달라야 할 때 자주 사용되지만 기본 클래스는 함수가 호출 될 때 제어가 필요합니다.

예를 들어, 이전 또는 대신 가상 함수를 공개하고 재정에 의존 가상 호출 후 다른 함수 호출을 만들 수있는 기본 클래스는 기본 구현 자체 호출 (오른쪽 시간을!)

+0

스티븐 (Steven)이 나에게 지적한 시작부터 생각해 봅시다. NVI는 2001 년 이후의 허브 셔터 (Herb Sutter)가 만든 템플릿 메서드 패턴의 특수 하위 집합 인 것으로 나타났습니다. – Jeff

5

template method pattern 일 수 있습니다.

+0

링크를 제공해 주셔서 감사합니다. 이 기사가 NVI에서 온 경우와 어떻게 다른지 기사보다 더 명확하게 설명해 주실 수 있습니까? 적어도 한 번 소스 나는 동의어임을 주장했다. http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-Virtual_Interface – Jeff

+0

나는 그것이 다르다고 생각하지 않는다. 사실 방금 게시 한 링크가 별칭이라고합니다. –

+0

Nevermind, Sutter는 TMP의 서브 세트로 NVI를 만들었습니다. http://www.gotw.ca/publications/mill18.htm (첫 번째 '나중에 설명 :'섹션에서) – Jeff

0

음 ... 개인 가상? 왜 새로운 용어를 발명합니까? 관용구가 아닌 언어 구조이고, 패턴으로 불리기에는 충분히 흥미롭지 않습니다.

+0

-1 : 예, 개인 가상입니다.C++을 사용하면 템플릿과 NVI 패턴을 구현하는 것이 일반적입니다. –

+0

@Billy : 동의 하시겠습니까, 아니면 동의하지 않습니까? –

+0

편집 결과로 downvote가 제거되었습니다. 당신은 오리지널을 가지고 있다면 OP 바보 : P를 부르는 것처럼 보입니다. –

1

비 가상 인터페이스 패턴으로 인터페이스에 virtual 기능이없는 패턴을 들었습니다. 즉, NVI입니다.

는 다른 문맥에서 그것은 당신의 run()이 격차를 채우기에 점프 파생 클래스와 템플릿 방법이며, 템플릿 메소드 패턴,라고합니다.

+0

이것은 실제로 되돌아 보면 가장 정확한 답변입니다. 그것은 약간 늦게 도착하는 것으로부터 득표의 쇄도를 놓쳤다. 고마워, 스비! – Jeff

+0

@Jeff : 찬양을 가져 주셔서 감사합니다. 그러나 1 분 이내로 대답했습니다. 사람들은 다른 답변을 더 잘 고려했습니다. – sbi