2017-01-04 1 views
2

나는 발전기의 다른 유형 (자신의 클래스를) 생성 함수를 작성하고 싶습니다 나는 이런 식으로 뭔가로 이동합니다C++ 템플릿 함수 반환 유형은

template <typename Iterator> 
class Generator { 
Iterator begin_; 
Iterator end_; 
public: 
Generator(Iterator begin, Iterator end) 
    : begin_(begin) 
    , end_(end) 
    {} 
}; 

template <typename GeneratorType, typename ContainerIterator> 
GeneratorType<ContainerIterator> make_generator(ContainerIterator begin, ContainerIterator end){ // Error occurs here 
    return GeneratorType<ContainerIterator>(std::forward<ContainerIterator>(begin), std::forward<ContainerIterator>(end)); 
} 

를하지만 오류 때문에 컴파일 아니에요 :

error: 'GeneratorType' is not a template (in line GeneratorType<ContainerIterator> make_generator...) 

가능한 경우 누구에게 알리십니까?

답변

3

변경 make_generator의 당신은 다른 템플릿에 매개 변수로 템플릿을 전달할 수

template <template<class> class GeneratorType, typename ContainerIterator> 
GeneratorType<ContainerIterator> make_generator(ContainerIterator begin, ContainerIterator end) 

정의. 그러나 매개 변수 정의는 템플리트 템플리트 매개 변수를 예상하는 것으로 지정해야합니다.

1

오류 메시지에 따르면 GeneratorType은 템플릿이 아닌 유형입니다. template <typename> class 구문을 사용하여 템플릿 템플릿 매개 변수로 지정해야합니다.

template <template <typename> class GeneratorType, typename ContainerIterator> 
GeneratorType<ContainerIterator> 
make_generator(ContainerIterator begin, ContainerIterator end){ 
    return GeneratorType<ContainerIterator> 
      (std::forward<ContainerIterator>(begin), 
       std::forward<ContainerIterator>(end)); 
}