2013-02-28 10 views
5

के आगे की घोषणा मेरे पास एक टेम्पलेट क्लास है जो एक मित्र टेम्पलेट फ़ंक्शन के साथ है। मैं वर्तमान में निम्नलिखित कोड है और यह काम कर रहा है:टेम्पलेट फ़ंक्शन

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

y मूल संस्करण के साथ मूल 'friend' घोषणा –

+0

का उपयोग नहीं, वेक्टर के सभी टेम्पलेट instantiations मित्र ऑपरेटर के सभी टेम्पलेट instantiations के साथ * कर रहे हैं। मैं दूसरा समाधान पसंद करूंगा जहां वेक्टर सभी अलग-अलग टेम्पलेट इंस्टॉलेशन को मित्रों के रूप में अनुमति नहीं देंगे। – noddy

उत्तर

3

मुझे लगता है कि आपको लगभग यह था। जब आप इसे दोस्त बनाते हैं तो आपको फ़ंक्शन को एक पैरामीटर टेम्पलेट बनाने की आवश्यकता होती है। जी ++ 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 
} 
+0

कोड संकलित करता है, [लेकिन यह 'लिंक] जीता (http://ideone.com/KIT4lV)। मित्र समारोह और नि: शुल्क फ़ंक्शन टेम्पलेट अलग-अलग कटौती हैं। – WhozCraig

+0

मुझे जीएनयू कंपाइलर का उपयोग करके WhozCraig के समान त्रुटि मिलती है। यह हालांकि विजुअल स्टूडियो सी ++ पर काम करता है। – noddy

संबंधित मुद्दे