J'ai retiré l'implémentation des méthodes de ma classe et j'ai détecté l'erreur suivante:
use of class template requires template argument list
pour la méthode qui ne nécessite pas du tout de type de modèle ... (pour les autres méthodes tout va bien)
Classe
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;
};
Mauvaise mise en œuvre
template<> //template<class T> also incorrect
bool MutableQueue::empty() const
{
scoped_lock lock(mutex);
return queue.empty();
}
Ça devrait être:
template<class T>
bool MutableQueue<T>::empty() const
{
scoped_lock lock(mutex);
return queue.empty();
}
Et si votre code est aussi court, insérez-le simplement, car vous ne pouvez de toute façon pas séparer l'implémentation et l'en-tête d'une classe de modèle.
Utilisation:
template<class T>
bool MutableQueue<T>::empty() const
{
...
}