嵌套模板特化导致"非法使用显式模板参数"?

Meh*_*dad 5 c++ templates

如何专门化嵌套模板?(见下面的错误.)

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();
}
Run Code Online (Sandbox Code Playgroud)

R. *_*des 6

这是函数模板的部分特化.这是不允许的.

您可以使用重载来解决此示例中的问题:

template<typename It>
It make_reverse_iterator(const reverse_iterator<It> &it)
{
    return it.base();
}
Run Code Online (Sandbox Code Playgroud)

如果重载不起作用,您可以使用类模板的部分特化.