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::向前(结束));
}