2012-06-30 3 views
1

내 응용 프로그램에 이상하게 반복되는 템플릿 패턴을 사용할 생각입니다. 그러나 클래스를 사용자 정의 유형에서 작동하도록하고 싶습니다. 이 아래 그림과 유사한 구조를 만들 수 있다면 이해하고 싶습니다 :템플릿 리프 클래스가있는 이상하게 반복되는 템플릿

template <class T_leaftype> 
class BaseTrajectoryPoint { 
}; 


template <class MyType> 
class MyTrajectoryPoint: public BaseTrajectoryPoint<MyTrajectoryPoint> { 
    private:  
     MyType A; 
}; 
위의 코드는 다음과 같은 오류와 함께 컴파일에 실패

:

type/value mismatch at argument 1 in template parameter list for ‘template class BaseTrajectoryPoint’

어떤 다른 방법이 있습니까 문제에 접근하고 있습니까? 정적 다형성을 사용하고 싶습니다만, 가능한 모든 메소드를 기본 클래스에 정의하는 것을 선호합니다.

답변

5
template <class T_leaftype> 
class BaseTrajectoryPoint { 
}; 


template <class MyType> 
class MyTrajectoryPoint: public BaseTrajectoryPoint<MyTrajectoryPoint<MyType> > { 
    private:  
     MyType A; 
}; 

MyTrajectoryPoint은 형식이 아닙니다. 템플릿 매개 변수로 전달하면 template<class T>이 아니라 template<typename> class T>으로 표시되며 후자는 기본 클래스에서 기대하는 것입니다. 그러나 MyTrajectoryPoint<MyType>은 유형을 명명하므로 기본 클래스의 템플릿 매개 변수로 사용할 수 있습니다. 물론

, 당신은 template<template<class> class T_leaftype>BaseTrajectoryPoint의 선언을 변경할 수 있지만, 당신은 템플릿 매개 변수, 결코 완전한 형식으로 클래스 템플릿을 사용하는있을 것입니다.

template<template <class> class TLeaf> // << This means: It is expected a template class as parameter 
class BaseTrajectoryPoint{ 
}; 

template <class MyType> 
class MyTrajectoryPoint: public BaseTrajectoryPoint<MyTrajectoryPoint> >{ 
    private: 
     MyType A; 
}; 
: 당신이 BaseTrajectoryPoint을 상속합니다 모든 클래스는 템플릿 클래스는 것을 알고 있다면, 당신은 다음과 같은 작업을 수행 할 수 있지만, 우리의 친구 Griwes 말했다 무엇