我想创建一个函数来创建不同类型的生成器(自己的类),我会使用这样的方法:
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...)
有谁知道这是否可能,如果可以如何解决?
最佳答案
改变make_generator
的定义
template <template<class> class GeneratorType, typename ContainerIterator>
GeneratorType<ContainerIterator> make_generator(ContainerIterator begin, ContainerIterator end)
您可以将模板作为参数传递给其他模板。但是参数定义需要指定为期望模板模板参数。
关于C++ 模板函数返回基于模板参数的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41461446/