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 :

les fonction lambda


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut les fonction lambda
    Salut.
    Maintenant, les lambda semblent plutôt bien supporté par les compilateurs (visual 2010, gcc 4.5, mingw 4.5,...). Je pense que plusieurs d'entre vous les ont tester voire adopté. Donc, voilà je voulais savoir ce que vous en pensez.

    J'ai testé un peu cette semaine et je trouve cela très pratique.

    QGraphicsView de Qt permet l'affiche d'un scenegraph2D. Cette classe propose une fonction appeler pour dessiner par dessus la scène. J'ai donc reimplementé cette fonction pour qu'il utilise un std::function. Avec les lambda, je peux très simplement fournir à la vue une nouvelle méthode pour dessiner.

    Quand on fait une ihm, un composent est souvent composé d'autre composent plus spécialisé. j'ai créé une widget qui utilise des std::function pour le dessin et les actions souris. Ainsi avec quelques lambda, le composant spécialise très simplement ce sous composant à ses besoin. Par exemple juste pour afficher une information de manière graphique.

    Au finale, je trouve que cela simplifie et éviter de créé une multitude de classe très spécialisé .On est très proche des ce que permet les inner classe de jave et C#.

    Par contre, faut pas en abusé sinon le code deviens compréhensible.

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Je trouve ça aussi génial
    Malheureusement, tous les IDEs ne le supportent pas encore (par ex. CDT).

  3. #3
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Je regrette plusieurs choses : quelles soient pas polymorphiques, qu'elles puissent pas être récursive. (enfin si on peut, mais il faut les nommé... donc bon c'est plus des lambda :€ ). Mais sinon ouai c'est quand même bien cool.
    Sinon pour palier à tout ça y'a boost.phoenix (surtout avec la V3 ... )

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par Goten Voir le message
    Je regrette plusieurs choses : quelles soient pas polymorphiques,
    C'est à dire?

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Elles peuvent pas être générique. (essaye d'utiliser une lambda 0x avec mpl::for_each :€ ). Elles devaient l'être (mot clef auto me semble) mais ça a été abandonné par manque de temps. C'est dommage.

  6. #6
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Citation Envoyé par yan Voir le message
    C'est à dire?
    C'est à dire qu'il n'est pas possible d'avoir une lambda correspondante à une fonction object ayant un operator() template.

    Citation Envoyé par Klaim
    Je trouve ça genial aussi surtout parceque ça me permet de rééllement encapsuler mes classes ayant des conteneurs en membre quand je veux permettre à du code exterieur d'agir sur les objets contenus mais de manière "controllé". Des points d'extension clean.
    Intéressant ! Tu pourrais développer ? (avec un petit exemple) Car perso, je n'ai pas encore utilisé les lambdas autrement que sur des petits snippets pour m'amuser, donc pas encore sur de vrai projet et ça m'intéresse beaucoup de voir en quoi les lambdas pourraient influencer le design de plus haut niveau.

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    @Arzar : 666 messages ça fait peur ^^

    Citation Envoyé par Arzar Voir le message
    C'est à dire qu'il n'est pas possible d'avoir une lambda correspondante à une fonction object ayant un operator() template.
    J'ai un peut de mal à comprendre. Car quand on écrit un lambda on connait le contexte non? et ce contexte pourrai être template (j'ai pas testé)? Sinon, c'est plus logique de faire un foncteur.

    Pour boost.phoenix, je trouve cela intéressant mais j'ai l'impression que c'est limité. Par exemple, comment créer une variable locale dans une boucle ou un if? Y as pas trop de perte de performance. Il semble qu'avec boost.lambda on pouvais perdre presque 30%.

    D’ailleurs quelqu'un à une idée du coût de l'utilisation des lambda?

  8. #8
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Je trouve ça genial aussi surtout parceque ça me permet de rééllement encapsuler mes classes ayant des conteneurs en membre quand je veux permettre à du code exterieur d'agir sur les objets contenus mais de manière "controllé". Des points d'extension clean.


    En fait ça simplifie énormément de code, et on a pas peur d'utiliser des lambda par souci de performance, comme on pourrait avoir peur pour de nouvelles features qui ont l'air avancées : ça ne reste qu'une autre manière d'exprimer les fonctors!

    Ah oui et du coup utiliser std::for_each() ou std::sort() ou std::find_if() devient un plaisir.

Discussions similaires

  1. doc sur les fonctions
    Par masterfab dans le forum C
    Réponses: 18
    Dernier message: 23/06/2005, 17h55
  2. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    Réponses: 33
    Dernier message: 18/01/2004, 13h58
  3. Réponses: 11
    Dernier message: 22/12/2003, 21h06
  4. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  5. Réponses: 7
    Dernier message: 24/05/2003, 15h56

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