2012-11-20 21 views
16

tôi di chuyển ra khỏi việc thực hiện các phương pháp từ lớp học của tôi và bắt gặp các lỗi sau:sử dụng các lớp mẫu đòi hỏi danh sách mẫu tranh luận

use of class template requires template argument list 

cho phương pháp whitch không đòi hỏi mẫu loại ở tất cả ... (cho khác phương pháp tất cả ok)

Lớp

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; 
}; 

sai thực hiện

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

không liên quan, nhưng 'đợi queue' là quy ước đặt tên thực sự kỳ lạ ... Tên loại nên dễ dàng nói ngoài tên instance – relaxxx

+0

Tôi sẽ làm theo lời khuyên của bạn, nhưng nó không phải là nguyên nhân gốc rễ – Torrius

Trả lời

34

Nó nên là:

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

Và nếu mã của bạn là ngắn, chỉ inline nó, như bạn không thể tách rời việc thực hiện và tiêu đề của một lớp mẫu anyway.

+0

Cảm ơn rất nhiều! Rõ ràng với tôi bây giờ là – Torrius

+0

'vì bạn không thể tách riêng việc triển khai và tiêu đề của một lớp mẫu' Ahhhh .. +1 – Dynite

6

Sử dụng:

template<class T> 
bool MutableQueue<T>::empty() const 
{ 
    ... 
} 
Các vấn đề liên quan