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 :

de l'intérêt des lambda


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut de l'intérêt des lambda
    Bonsoir,

    loin de moi de nourrir un bon gros troll poilu, mais plus je lis des articles sur les lambda, plus je constate que c'est un truc inutile.

    je m'explique, par exemple à la lecture de http://herbsutter.com/elements-of-modern-c-style/

    prenons ce morceau de code auto i = find_if( begin(v), end(v), [=](int i) { return i > x && i < y; } );quel est l’intérêt de de mettre un lambda, on peut supposer que ce find_if ne risque pas d'être tout seul dans tout le code, avec autant de répétition du lambda, donc très mauvais niveau réutilisation.

    après on peut toujours faire comme dans l'exemple de 3DArchi (http://www.developpez.net/forums/d1160181/c-cpp/cpp/langage/fonction-lambda-parametre-fonction/)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    auto lambda =
          [](int i1, int i2)
       {
          return i1+i2;
       }
       ;
    et dans ce cas, quel est l'intérêt par rapport à un foncteur je dirai "traditionnel" ? si quelqu'un a une petite explication ...

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Bonsoir,

    Tu ne trouves pas que c'est quand même bien plus simple (aussi bien à écrire qu'à faire évoluer) que de devoir utiliser une classe (et donc lui trouver un nom) avec une fonction membre et un constructeur si l'on doit faire une capture ?

  3. #3
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    bah comme ça, non, je ne trouve pas ça plus simple (avis personnel, pas de justification), de plus que ça soit le foncteur et le lambda, il faut un nom de toute façon, de ce coté là ça change pas grand chose.

    après je vois un autre inconvénient qui vient de surgir, le foncteur, tu n'as pas à en instancier une ... instance; le lambda, soit tu en as un en local, qui risque d'amener une duplication tôt ou tard, soit en global ...

    après si c'est juste du sucre syntaxique, ça remue, selon moi, beaucoup d'air pour pas grand chose.

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Avec un foncteur tu as aussi une instance.

    Pour les lambda si tu l'utilises juste une fois tu n'as pas besoin de lui donner un nom.

    Ecrit un foncteur prenant en capture un seul élément, et après ajoute un deuxième élément en capture. Maintenant fait pareil avec une lambda, tu devrais voir que c'est quand même plus simple.

    Oui globalement ce n'est que du sucre syntaxique comme beaucoup d'utilisation d'éléments de syntaxe ajoutés au C++11. Peut-être que ceux qui font des maths théoriques y verront des choses plus fondamentales (mais là je peux pas t'aider ^^).

  5. #5
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    peut être bien que oui, peut être bien que non, je testerai ça plus tard dans la journée.

    entre temps je suis tombé la dessus : http://channel9.msdn.com/Events/PDC/PDC10/FT13
    et ben même après ça, je cherche encore le truc.

    ps: j'ai peut être compris quelque chose d'intéressant dans la vidéo, mais la syntaxe résultante est tellement tordu que ça en perd tout l'intérêt.

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    C'est vrai que pour les lambda, il y a un problème de duplication de code. En même temps, le code dupliqué sera en général extrèmement simple.

    De plus, les lambda ont la possibilité de travailler sur une capture (en plus des paramètres). Et je soupçonne que nous allons voir apparaitre du code qui s'auto-modifie, de cette manière :

    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
     
    auto lambda1 = [](int i1, int i2) -> void { ... }
    auto lambda2 = [](int i1, int i2) -> void{ ... } // même prototype
     
    struct polylambda 
    {
      std::function<void(int,int)> process;
    };
     
    int main()
    {
      polylambda pl;
      if (std::string(av[1]) == "1")
        pl.process = lambda1;
      else
        pl.process = lambda2;
      pl.process(atoi(av[2]), atoi(av[3]));
    }
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

Discussions similaires

  1. Performances : intérêt des vues ?
    Par Mr N. dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/10/2005, 13h42
  2. Intérêt des TActionList
    Par Invité dans le forum C++Builder
    Réponses: 4
    Dernier message: 11/03/2005, 17h31
  3. [glut] de l'intérêt des listes
    Par khayyam90 dans le forum OpenGL
    Réponses: 3
    Dernier message: 26/07/2004, 10h35
  4. Quel est l'intérêt des Services Web ??
    Par silvermoon dans le forum Débats sur le développement - Le Best Of
    Réponses: 19
    Dernier message: 12/02/2003, 22h28
  5. [Technique] Intérêt des index
    Par ddams dans le forum Décisions SGBD
    Réponses: 10
    Dernier message: 04/11/2002, 15h11

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