[C++] unifier les itérateurs ...

zzegod Messages postés 3 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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é :

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 ?

Merci d'avance !
--
-- ZZ

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Ben ca ne me surprend pas que le compilo te jète :p Moi je ferais plutôt une fonction template sur le container :
    template <typename Tcontainer>
    void show_container(const Tcontainer & c){
      typename Tcontainer::const_iterator
        cit (c.begin()),
        cend(c.end());
      for(;cit!=cend;++cit){
        std::cout << *cit << ' ';
      }
      std::cout << std::endl;
    }

    Cette fonction étant template elle doit impérativement être déclarées et implémentée dans le .hpp

    Bonne chance
    0