web-dev-qa-db-fra.com

l'utilisation du modèle de classe nécessite une liste d'arguments de modèle

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();
}
21
Torrius

Ç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.

40
xiaoyi

Utilisation:

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