Template Friend Function of a Template Class(Friend with More Parameters)

Template Friend Function of a Template Class (Friend with More Parameters)

我无法让它工作:

template<std::size_t s, typename T>
class A;

template<std::size_t s, typename T, typename U>
A<s, T> operator *(U const lhs, A<s, T> const& rhs);

template<std::size_t s, typename T>
class A
{
    // Blabla
    
    template<typename U>
    friend A<s, T> operator * <>(U const lhs, A<s, T> const& rhs);
};

编译失败,出现以下错误消息:

invalid use of template-id 'operator * <>' in declaration of primary template.

由于多了一个模板参数(相对于模板class参数),似乎不需要在函数名后面加上<>。 总之,这对我来说效果很好:

template<std::size_t s, typename T>
class A;

template<std::size_t s, typename T, typename U>
A<s, T> operator *(U const lhs, A<s, T> const& rhs);

template<std::size_t s, typename T>
class A
{
    // Blabla
    
    template<typename U>
    friend A<s, T> operator *(U const lhs, A<s, T> const& rhs);
};

template<std::size_t s, typename T, typename U>
A<s, T> operator *(U const lhs, A<s, T> const& rhs)
{
    //BlaBla
}