Mam szablon klasy z funkcją szablonu znajomego. Obecnie mam następujący kod i to działa:Forward Declaration of Template Function
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
}
wolałbym na moje rozwiązanie, aby do przodu deklarację funkcji znajomemu tak, że mogę mieć korzyści zabezpieczeń i jeden do jednego korespondencji, która zapewnia w porównaniu do mojej obecnej metody. Próbowałem następujących rzeczy, ale wciąż mam błędy.
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
}
y nie używać oryginalnego 'friend' deklarację –
z oryginalną wersją, wszystkie dawałaby szablonu wektora są przyjaciółmi ze wszystkimi dawałaby szablonów od operatora *. Wolałbym drugie rozwiązanie, w którym Wektory nie pozwoliłyby przyjaciołom wszystkich różnych instancji szablonów. – noddy