2017-01-04 257 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)); 
} 
相关问题