Bonjour,

je souhaite créer une classe 'Ensemble' qui hérite de 'std::unordered_set' :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
template<class T>
class Ensemble : public std::unordered_set<T> {
    ...
}
J'ai plusieurs classe qui hérite de la classe 'Element' :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
class A : public Element { ... }
class B : public Element { ... }
J'ai défini la fonction de Hashage pour 'Element' :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
namespace std {
    template <>
    struct hash<Element> {
        size_t operator()(const Element & e) const noexcept {
            return e.getId(); // Unique Id
        }
    };
}
Le problème c'est que je ne parviens pas à faire des ensemble de A ou B :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
int main() {
    Ensemble<Element> mySet_1; // Ok  
    Ensemble<A> mySet_2; // Pas Ok
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
error: no match for call to '(const std::hash<A>) (const A&)'|
Quelqu'un peut-il m'expliquer le fonctionnement de std::hash ? Ou est l'erreur ? Merci.