2013-02-11 5 views
0

소유권, 파이프 라인과 같은 상호 작용, statemachine behavior 등을 비롯한 여러 가지 객체 동작이 반복적으로 필요합니다.이 정책은 "정책"이라는 새로운 디자인 패턴을 시험해 볼 수있는 좋은 기회라고 생각했습니다. "C++에 관한 꽤 유명한 책에서.정책/템플릿을 사용하는 일반 객체

는 지금은 소유권과 상호 작용을 다루는이 개 정책을해야하는 클래스

template < 
    class T, 
    template <typename T> class pOwnership 
    template <typename T> class pInteraction 
> 
class object : public pOwnership<T>, public pInteraction<T> 
{...} 

을 만드는 어려움이있다. 예를 들어 은 pOwnership는 방법 내가 소유권을 필요로하지 않는 경우 예를 들어, 내부 목록

std::vector<T*>. 

(다른 소유권 정책을 사용하여 객체를 추가

void add(T &obj) 

, 무효 추가를 가지고 (T &는 OBJ)도 이제 T 형을 잘못된 응용 프로그램 코드)

를 사용하는 경우 컴파일 시간 오류의 결과로 선언되지 않은 수는해야 물론 객체

typedef template<object, pOwnershipRecursive, pInteractionPipeline> myObject; 

컴파일러 오류의 결과로, 템플릿 형 자체가 다음 객체 클래스를 의미 최종 정책 호스트 클래스, 수.

myObject와 같은 클래스를 어떻게 구현할 수 있습니까?

+0

"C에 대한 아주 유명한 책 ++"도움이되었다 –

답변

0

님의 CRTP을 사용할 것으로 예상됩니다

class myObject : public object<myObject, 
       pOwnershipRecursive, 
       pInteractionPipeline> 
{ 
    // your real content here: 
    // an object that consists solely of policies is probably useless 
}; 
+0

, 감사합니다. 비록 내가 다른 파생물을 필요로하지 않는 다른 메소드 (CRTP를 사용하면 동적 인 다형성을 포함하는 정책 -> 오브젝트 -> myObject가 있음) – markusneg