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

Langage C++ Discussion :

Factorisation de code de surcharge des différents opérateurs


Sujet :

Langage C++

  1. #1
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2014
    Messages : 105
    Points : 97
    Points
    97
    Par défaut Factorisation de code de surcharge des différents opérateurs
    Gentlwomens, gentlemens

    J'ai une question : supposons un code qui permette de définir l'action des opérateurs sur un conteneur. Je trouve qu'écrire le code pour les différents opérateurs (dans le cas ci dessous) assez redondant.

    Est ce qu'il y a un moyen de factoriser (sûrement un concept que je n'ai pas) :

    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
    template <class T>
    std::vector<T> &operator+(T elementToAdd, const std::vector<T> & vector)
    {
        std::vector<T> result(vector.size());
     
        for (int i=0; i<result.size(); i++)
        {
            result[i]= vector[i]+ elementToAdd;
        }
        return result;
    }
     
    template <class T>
    std::vector<T> &operator-(T elementToRemove, const std::vector<T> & vector)
    {
        std::vector<T> result(vector.size());
     
        for (int i=0; i<result.size(); i++)
        {
            result[i]= vector[i]- elementToRemove;
        }
        return result;
    }

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 053
    Points
    33 053
    Billets dans le blog
    4
    Par défaut
    Un moment donné, faut écrire le code. Et ce code est suffisament simple. Tu peux bien utiliser un truc de algorithm ou autre fantaisie, mais tu vas pas y gagner.
    Bon après si tu utilisais un ranged-for-loop ce serait sûrement plus concis, et il conviendrait de ne pas retourner par référence une variable locale...
    Sinon il reste toujours les macros s'il y en a vraiment beaucoup. Le cas est suffisament simple pour ne pas avoir de problème et nécessiter de debugger cette partie.

  3. #3
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 580
    Points : 7 712
    Points
    7 712
    Par défaut
    Et attention, ton code retourne des références à des variables locales. Le compilateur à dû t'avertir de cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template <class T>
    std::vector<T>  operator+( T elementToAdd, std::vector<T> vector ) {
        for ( auto&  x  :  vector )
            x += elementToAdd;
        return  vector;
    }
    Et non, il n'y a pas de moyen de factoriser.

  4. #4
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Avril 2014
    Messages : 105
    Points : 97
    Points
    97
    Par défaut
    Merci pour les retours par références, j'avais corrigés juste après avoir fait le post. Mea culpa, je vous ai envoyé le code sans le tester.

    Du coup on va écrire le code ! Je trouvais ça assez redondant ici.

    Merci pour vos retours !

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

Discussions similaires

  1. surcharge des opérateurs
    Par Arson dans le forum C++
    Réponses: 9
    Dernier message: 30/05/2008, 11h40
  2. Réponses: 2
    Dernier message: 11/01/2008, 10h40
  3. Réponses: 7
    Dernier message: 02/12/2007, 21h43
  4. Surcharge des opérateurs ?
    Par kedare dans le forum Ruby
    Réponses: 3
    Dernier message: 06/11/2006, 23h47
  5. Variables polyvalentes et surcharge des opérateurs
    Par Antoine_935 dans le forum C++
    Réponses: 14
    Dernier message: 08/09/2006, 12h38

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