我想创建创建不同类型的生成器(自己的类)的函数,我想用这样的东西:
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...)
有人知道是否有可能,如果是,如何修复它?
答案 0 :(得分:3)
更改make_generator
的定义
template <template<class> class GeneratorType, typename ContainerIterator>
GeneratorType<ContainerIterator> make_generator(ContainerIterator begin, ContainerIterator end)
您可以将模板作为参数传递给其他模板。但是参数定义需要指定为期望模板模板参数。
答案 1 :(得分:1)
正如错误消息所示,E_NOTICE
是一种类型,而不是模板。您需要使用GeneratorType
语法将其设为模板模板参数:
template <typename> class