2012-11-20 11 views
16

मैं अपने वर्ग से तरीकों कार्यान्वयन बाहर चले गए और निम्न त्रुटि पकड़ा टेम्पलेट तर्क सूची की आवश्यकता है तरीकों सब ठीक)उपयोग

कक्षा

template<class T> 
class MutableQueue 
{ 
public: 
    bool empty() const; 
    const T& front() const; 
    void push(const T& element); 
    T pop(); 

private: 
    queue<T> queue; 
    mutable boost::mutex mutex; 
    boost::condition condition; 
}; 

गलत कार्यान्वयन

template<> //template<class T> also incorrect 
bool MutableQueue::empty() const 
{ 
    scoped_lock lock(mutex); 
    return queue.empty(); 
} 
+6

प्रासंगिक नहीं है, लेकिन 'कतार queue' है वास्तव में अजीब नामकरण परंपरा ... प्रकार का नाम आसानी से अलग उदाहरण के नाम से बता जा – relaxxx

+0

मैं आपकी सलाह का पालन करेंगे, लेकिन ऐसा नहीं है चाहिए एक रूट कारण – Torrius

उत्तर

34

यह होना चाहिए:

template<class T> 
bool MutableQueue<T>::empty() const 
{ 
    scoped_lock lock(mutex); 
    return queue.empty(); 
} 

और अपने कोड है कि छोटा है, बस इसे इनलाइन, आप लागू करने और एक टेम्पलेट वर्ग के शीर्षक वैसे भी अलग नहीं कर सकते के रूप में है यदि।

+0

बहुत बहुत धन्यवाद! यह अब मेरे लिए स्पष्ट है – Torrius

+0

'क्योंकि आप टेम्पलेट वर्ग के कार्यान्वयन और शीर्षलेख को अलग नहीं कर सकते हैं' अहह .. +1 – Dynite

6

उपयोग:

template<class T> 
bool MutableQueue<T>::empty() const 
{ 
    ... 
}