Tôi có một lớp mẫu với chức năng mẫu bạn. Tôi hiện đang có các mã sau đây và nó đang làm việc:Chuyển tiếp Bản khai mẫu Chức năng
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
}
Tôi muốn cho giải pháp của tôi để có tờ khai phía trước của hàm bạn để tôi có thể có những lợi ích an ninh và one-to-one thư từ mà nó cung cấp so với phương pháp hiện tại của tôi. Tôi đã thử những điều sau nhưng tiếp tục gặp lỗi.
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 không sử dụng bản gốc 'friend' khai –
Với phiên bản gốc, tất cả các mẫu instantiations của Vector là bạn bè với tất cả các mẫu instantiations của nhà điều hành *. Tôi thích giải pháp thứ hai mà Vectors sẽ không cho phép tất cả các bản mẫu khác nhau là bạn bè. – noddy