Bonjour,
J'essaye d'unifier différents types d'itérateurs afin de simplifier l'interface de plusieurs classes containers. Concrètement, voici (en essence) ce que j'ai tenté :
Code :
- class A {...};
- typedef std::iterator<std::bidirectional_iterator_tag, A> A_iterator;
- class B {
- private:
- std::vector<A> v;
- std::set<A> s;
- public:
- A_iterator v_begin() {return v.begin();}
- ...
- A_iterator s_end() {return s.end();}
- };
|
Dans le but de remplacer les vector<A>::iterator et set<A>::iterator par des A_iterator (unification pour l'utilisateur, et encapsulation qui fait que l'utilisateur n'a pas besoin de savoir qu'un B est implémenté par un vector+set pour s'y promener ...)
Malheureusement, le compilo refuse de caster le type d'itérateur retourné par v.begin() en un A_iterateur, même explicitement.
Une idée, un conseil, une astuce (voire soluce) ?
Merci d'avance !
-- ZZ