私は、テンプレートテンプレート関数を持つテンプレートクラスを持っています。私は現在、次のコードを持っており、それが働いている:テンプレート関数の前方宣言
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
}
私はセキュリティ上の利点と、それが提供する1対1の対応を持つことができるように、私はフレンド関数の前方宣言を持っている私の解決策を好むだろう私の現在の方法と比較して。私は次のことを試しましたが、エラーが続いています。
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
}
オリジナルの「friend」宣言を使用しない –
元のバージョンでは、Vectorのすべてのテンプレートインスタンス化は、演算子*のすべてのテンプレートインスタンス化を持つフレンドです。私はベクトルがすべての異なるテンプレートインスタンス化を友人にすることを許さない第2の解決法を好むだろう。 – noddy