模板功能的前向声明

时间:2013-02-28 00:33:01

标签: c++ templates friend

我有一个带有朋友模板功能的模板类。我目前有以下代码,它正在运行:

template<class T>
class Vector
{
  public:
    template<class U, class W>
    friend Vector<U> operator*(const W lhs, const Vector<U>& rhs);
}

template<class U, class W>
Vector<U> operator*(const W lhs, const Vector<U>& rhs)
{
  // Multiplication
}

我希望我的解决方案能够向朋友函数提前声明,这样我就可以获得安全优势,并且与我当前的方法相比,它提供了一对一的通信。我尝试了以下但仍然遇到错误。

template<class T>
class Vector;

template<class T, class W>
Vector<T> operator*(const W lhs, const Vector<T>& rhs);

template<class T>
class Vector
{
  public:
    friend Vector<T> (::operator*<>)(const W lhs, const Vector<T>& rhs);
}

template<class T, class W>
Vector<T> operator*(const W lhs, const Vector<T>& rhs)
{
  // Multiplication
}

1 个答案:

答案 0 :(得分:3)

我觉得你差不多了。当你交友时,你只需要将函数作为单个参数模板。以下编译在g ++ 4.5上,虽然因为我无法用你的测试用例测试实例化,所以我不能100%肯定它会解决你的真正问题。

template<class T>
class Vector;

template<class T, class W>
Vector<T> operator*(const W lhs, const Vector<T>& rhs);

template<class T>
class Vector
{
  public:
    template<class W>
    friend Vector<T> operator*(const W lhs, const Vector<T>& rhs);
};

template<class T, class W>
Vector<T> operator*(const W lhs, const Vector<T>& rhs)
{
  // Multiplication
}