2011-08-30 8 views
3

어떻게이 템플릿 구조체를 인스턴스화 할 수 있습니까?구조체 템플릿 인스턴스화 문제가 발생했습니다.

template<typename T, 
    template<typename, template <typename> class D= std::allocator 
      >class Z=std::vector 
     > 

struct amen 
{ 
    Z<T,D<T> > cc; // i know D template class parameter is not visible , how do i do it? 
}; 

int main(){ 
amen<int> moreAmen; 
} 

아무에게도 어떻게 할 수 있습니까?

답변

6

잘못되었습니다. 그것은이어야합니다

template<typename U, typename D = std::allocator<U> 
     > class Z = std::vector 

std::vector의 할당자는 템플릿이 아닙니다. 당신은 할당에 대한 기본 인수를 준 그런 다음 cc의 선언이

Z<T> cc; 

이되고, 당신은 그것을 위해 어떤 인수를 전달 할 필요가 없습니다. 당신이 원한다면, 당신은 std::allocator<T>하거나 다시

Z<T, std::allocator<T> > cc; 
// or T<T, my::funny:allocator> cc; 

템플릿 템플릿 인자의 매개 변수의 기본 인수는 클래스/구조체의 해당 템플릿 템플릿 매개 변수에 "상속"되지 않은 다른 할당을 통과해야 주형. 위와 같이 다시 지정해야합니다 (std::allocator<U>을 기본 템플릿 인수로 지정).

+0

std :: allocator는 함수 템플릿 또는 클래스 템플릿입니다. 그렇다면 템플릿 ID를 지정해야하므로 –

+0

@ Mr.Anubis :'std :: vector'의 템플릿 서명은''이 아니라 class>를 사용하십시오. –

+0

@Kerrek : 혼란을 해결해 주셔서 감사합니다. –

관련 문제