如何专门设计嵌套模板? (见下面的错误。)
using std::reverse_iterator;
template<typename It>
reverse_iterator<It> make_reverse_iterator(const It &it)
{
return reverse_iterator<It>(it);
}
template<typename It>
It make_reverse_iterator<reverse_iterator<It> >(const reverse_iterator<It> &it)
{
// Above ^
// error C2768:
// 'make_reverse_iterator': illegal use of explicit template arguments
return it.base();
}
答案 0 :(得分:6)
这是功能模板的部分特化。这是不允许的。
您可以使用重载来解决此示例中的问题:
template<typename It>
It make_reverse_iterator(const reverse_iterator<It> &it)
{
return it.base();
}
如果重载不起作用,您可以使用类模板的部分特化。
答案 1 :(得分:4)
这是partial function template specialization,不允许这样做。但是,您可以通过重载函数来实现相同的效果:
template<typename It>
It make_reverse_iterator(const reverse_iterator<It> &it)
{
return it.base();
}
以上不是模板专精,而是make_reverse_iterator
的模板重载,参数为const_reverse_iterator<It>
。