IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Iterateur et pointeur de fonctions


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut Iterateur et pointeur de fonctions
    Bonjour,
    ce que je veux faire est assez bizare.

    J'aimerai un iterateur d'objet qui reagisse differement selon des parametres.

    Comme cela vu d'en haut, on appelle la methode suivant() de l'iterateur et ce dernier gere en interne les differents parametres et renvoie le bon objet.

    Les parametres serait par exemple : renvoyer un element sur deux, iteration circulaire, gerer le sens d'iteration en interne (pas de precedent())...

    Je pourrais faire trois ou quatres if imbriques mais on aurait des tests a chaque appel de suivant()...

    Serait-il possible à la place de faire de suivant() un pointeur de fonction qui serait mis a jour lors d'un changement des parametres ?
    Y gagnerais-je ?

  2. #2
    Membre Expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    je n'ai rien capté lol

    tu peux réexpliquer plus clairement ?

    merci

  3. #3
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Tu n'aurais pas plutôt intérêt à créer autant de types d'itérateur que tu as de besoin? Les changements comportementaux sur ce type de classe, je sais pas si c'est top (C'est au moins surprenant )

  4. #4
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    si je cree des types d'iterateurs differents, cela ne changera pas, je devrais en haut niveau faire des tests pour savoir lequel je doit utiliser.

    Je pensais faire une initialisation comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    /**
     * @brief Initialise l'iterateur pour qu'il agisse en adequation avec les parametres de lecture
     * @param parametres les nouveaux parametres de lecture
     */
    void
    IterateurPointeurImage::Initialise(slong parametres)
    {
      if (parametres & masque_lecture_sens) // suivant
      {
    	if (parametres & masque_lecture_rapide) // suivantsuivant
    	{
    	  if (parametres & masque_lecture_boucle) // circulaire
    	  {
    	    _suivant = suivantSuivantCirculaire;
    	  }
    	  else // one shot
    	  {
    	    _suivant = suivantSuivant;
    	  }
    	}
    	else // direct
    	{
    	  if (parametres & masque_lecture_boucle) // circulaire
    	  {
    	    _suivant = suivantDirectCirculaire;	
    	  }
    	  else // one shot
    	  {
    	    _suivant = suivantDirect;
    	  }
    	}
      }
      else // precedent
      {
    	if (parametres & masque_lecture_rapide) // precedentprecedent
    	{
    	  if (parametres & masque_lecture_boucle) // circulaire
    	  {
    	    _suivant = precedentPrecedentCirculaire;
    	  }
    	  else // one shot
    	  {
    	    _suivant = precedentPrecedent;	  
    	  }
    	}
    	else // direct
    	{
    	  if (parametres & masque_lecture_boucle) // circulaire
    	  {
    	    _suivant = precedentCirculaire;
    	  }
    	  else // one shot
    	  {
    	    _suivant = precedentDirect;
    	  }
    	}				
      }
    }
    et ensuite m'en servir comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /**
     * @brief Place l'iterateur sur le pointeur image suivant dans la selection en respectant les parametres de lecture
     * @return A-t-on un nouvel element ?
     */
    bool
    IterateurPointeurImage::suivant()
    {
      return (*_suivant)();
    }
    avec dans la description de ma classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    private:
    typedef bool (IterateurPointeurImage::iteration)();
    
    private:
    /**
     * @brief Place l'iterateur sur le pointeur image suivant dans la selection
     * @return A-t-on un nouvel element ?
     */
      iteration* _suivant;
      
    /**
     * @brief Place l'iterateur sur le pointeur image suivant dans la selection
     * @return A-t-on un nouvel element ?
     */
      iteration suivantDirect;
    mais là en rouge ça coince. j'ai l'erreur : "typedef name may not be a nested-name-specifier"

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    C'est simplement des adapteurs que tu veux.

  6. #6
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Après quelques tests, il s'avere qu'il est plus rapide de faire jusqu'a cinq ou six ifs imbriqués plutot que d'avoir recours a un pointeur de fonction. Je resterai donc avec mes ifs.

Discussions similaires

  1. opengl et pointeur de fonction
    Par Oldhar dans le forum C
    Réponses: 5
    Dernier message: 06/11/2003, 23h56
  2. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 19h37
  3. Matrice de pointeurs de fonctions
    Par sebduth dans le forum C
    Réponses: 15
    Dernier message: 18/07/2003, 14h03
  4. [Kylix] Pointeur de fonctions
    Par _dack_ dans le forum EDI
    Réponses: 1
    Dernier message: 03/07/2003, 10h17
  5. pointeur de fonction
    Par kardath dans le forum C
    Réponses: 4
    Dernier message: 28/12/2002, 14h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo