模板类的友元函数(多形参的友元)



我不能让这个工作:

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-id 'operator * <>'。

由于有一个额外的模板参数(与模板类参数相比),因此似乎不需要在函数名之后添加<>。总之,这对我来说工作得很好:

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
}

最新更新