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 :

comment éviter d'écrire plusieurs fois la même chose


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 24
    Points
    24
    Par défaut comment éviter d'écrire plusieurs fois la même chose
    Bonjour,

    Je me suis rendu compte que ma fonction s'éxécutait bien plus rapidement lorsque le paramètre indx était connu avant la compilation.
    Puisque ce paramètre ne peut prendre que 8 valeurs distinctinctes, j'ai décidé de créer 8 sous fonctions correspondantes et de remplacer ma fonction par :

    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
     
    	inline void 	fonction(......., int indx)
    	{
    		switch (indx)
    		{
    			case 8:fonction_8(.......);break;
    			case 7:fonction_7(.......);break;
    			case 6:fonction_6(.......);break;
    			case 5:fonction_5(.......);break;
    			case 4:fonction_4(.......);break;
    			case 3:fonction_3(.......);break;
    			case 2:fonction_2(.......);break;
    			case 1:fonction_1(.......);break;
    			default:;break;
    		}
    	}
    les fonction_8... ont été créées en prenant le code de la fonction de départ et en remplaçant en dur le paramètre indx par sa valeur.

    Ca marche bien, mais le hic c'est que je me retrouve maintenant avec 8 fois le même code.

    Est-il possible de d'utiliser une macro pour définir les 8 fonctions d'un coup?

    Merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par damiengif Voir le message
    Est-il possible de d'utiliser une macro pour définir les 8 fonctions d'un coup?
    Tu es probablement dans le cas où un template paramétré par un entier ferait l'affaire. En gros tu définis ta fonction comme un template dépendant du seul parametre indx, et tes 8 fonctions vont être générées à la compilation. Et tu appelles par un truc comme

    Fonction<indx>(...)

    Francois

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    Merci beaucoup pour ton aide

  4. #4
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    Citation Envoyé par fcharton Voir le message
    Tu es probablement dans le cas où un template paramétré par un entier ferait l'affaire. En gros tu définis ta fonction comme un template dépendant du seul parametre indx, et tes 8 fonctions vont être générées à la compilation. Et tu appelles par un truc comme

    Fonction<indx>(...)

    Francois
    Je pense qu'on peut gagner encore plus de temps en écrivant 8 spécialisations (une pour chaque valeur).

    mais bon, à ce niveau, autant appeler directement la fonction( vu queindx doit être const).
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il faudra quand même garder le switch, car idx n'est pas une constante connue à la compilation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    switch (indx)
    {
    	case 8:fonction<8>(.......);break;
    	case 7:fonction<7>(.......);break;
    	case 6:fonction<6>(.......);break;
    	case 5:fonction<5>(.......);break;
    	case 4:fonction<4>(.......);break;
    	case 3:fonction<3>(.......);break;
    	case 2:fonction<2>(.......);break;
    	case 1:fonction<1>(.......);break;
    	default:;break;
    }

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    C'est exactement ce que je viens de faire, et ça marche parfaitement.

    Merci à tous, ça me fait 1000 lignes de code en moins.

  7. #7
    Invité
    Invité(e)
    Par défaut
    "One of my most productive days was throwing away 1000 lines of code."
    -- Ken Thompson

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/01/2012, 17h13
  2. Réponses: 4
    Dernier message: 15/05/2009, 17h52
  3. Réponses: 3
    Dernier message: 13/04/2008, 02h03
  4. Réponses: 12
    Dernier message: 23/01/2007, 19h07
  5. Réponses: 3
    Dernier message: 17/08/2006, 04h11

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