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

时间:2017-01-04 10:22:36

标签: 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, 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...)

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

2 个答案:

答案 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