This is related to my previous question regarding templates, that I managed to make work. I tried a more complex example:
template <typename T>
struct Cmp{
    bool operator() (const set<typename set<Node <T>>::iterator, Cmp<T>>, Cmp<T>& lhs, const set<typename set<Node <T>>::iterator, Cmp<T>>, Cmp<T> &rhs) {
        return true;
    }
    bool operator() (const set<typename set<Node <T>>::iterator, Cmp<T>>, Cmp<T>& lhs, const unsigned& rhs) {
        return true;
    }
};
template <typename T>
class Graph {
private:
    set<set<typename set<Node <T>>::iterator, Cmp<T>>, Cmp<T>> cliques = ;
};
Node is a template class. I only instantiate the Graph class once, with <int>, but I get the following compilation error:
error: no match for call to 
(Cmp<int>) (const std::set<std::_Rb_tree_const_iterator<Node<int> >, Cmp<int>, std::allocator<std::_Rb_tree_const_iterator<Node<int> > > >&, const key_type&)
    && _M_impl._M_key_compare(_S_key(_M_rightmost()), __k))
I have seemingly tried about every possible prototypes for the functions in Cmp. The error seems to be that operator() (const set<set<Node<int>>::const_iterator, Cmp<int>>&, const key_type&) is not defined. However, assuming that key_type is the type of the values stored in the set, the override I have provided above should work.
What is missing from my code?
Aucun commentaire:
Enregistrer un commentaire