C++ C++;基于模板参数返回类型的模板函数

C++ C++;基于模板参数返回类型的模板函数,c++,c++11,templates,C++,C++11,Templates,我想创建一个函数来创建不同类型的生成器(自己的类),我会这样做: template <typename Iterator> class Generator { Iterator begin_; Iterator end_; public: Generator(Iterator begin, Iterator end) : begin_(begin) , end_(end) {} }; template <typename GeneratorType,

我想创建一个函数来创建不同类型的生成器(自己的类),我会这样做:

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));
}
模板
级发电机{
迭代器begin;
迭代器结束;
公众:
生成器(迭代器开始、迭代器结束)
:开始(开始)
,结束(完)
{}
};
模板
GeneratorType make_generator(ContainerInterator开始,ContainerInterator结束){//此处发生错误
返回生成器类型(std::forward(begin),std::forward(end));
}
但它没有编译,因为出现错误:

error: 'GeneratorType' is not a template (in line GeneratorType<ContainerIterator> make_generator...)
错误:“GeneratorType”不是一个模板(行内GeneratorType make_generator…)

有人知道这是否可能,如果有,如何修复吗?

更改
生成生成器的定义

template <template<class> class GeneratorType, typename ContainerIterator>
GeneratorType<ContainerIterator> make_generator(ContainerIterator begin, ContainerIterator end)
模板
生成器类型make_生成器(ContainerInterator开始,ContainerInterator结束)

可以将模板作为参数传递给其他模板。但是参数定义需要指定为需要模板参数。

正如错误消息所说,
GeneratorType
是一种类型,而不是模板。您需要使用
模板类
语法将其设置为模板参数:

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));
}
模板
生成器类型
使发电机(集装箱运输机开始,集装箱运输机结束){
返回生成器类型
(标准::前进(开始),
std::向前(结束));
}