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 :

std::fonction vs pointeur de fonction


Sujet :

Langage C++

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut std::fonction vs pointeur de fonction
    Hello,

    Est-ce intéressant d'utiliser un std::function là où un pointeur de fonction suffirait ?

    Je trouve cela plus lisible, mais peut-on craindre une baisse de performances ?

  2. #2
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Bonjour

    Personnellement, j'utilise un paramètre template qui permet donc de prendre un std::function, une référence vers une fonction, un foncteur ou une lambda.

    Il n'y a pas de raison à ce que la référence de fonction soit plus lente qu'un pointeur. De plus un foncteur peut être entièrement inliné.

  3. #3
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Bonjour

    Personnellement, j'utilise un paramètre template qui permet donc de prendre un std::function, une référence vers une fonction, un foncteur ou une lambda.

    Il n'y a pas de raison à ce que la référence de fonction soit plus lente qu'un pointeur. De plus un foncteur peut être entièrement inliné.
    Ou tu fais de l'effacement de type par la suite, et tu réinventes la roue (ou plutôt std::function), ou la durée durant laquelle tu peux garder cette valeur est réduite.

    Citation Envoyé par oodini Voir le message
    Hello,

    Est-ce intéressant d'utiliser un std::function là où un pointeur de fonction suffirait ?

    Je trouve cela plus lisible, mais peut-on craindre une baisse de performances ?
    Oui. Tu as une couche d'effacement de type, ce qui donne la puissance d'expression mais elle a un coût. Templatiser le code est un moyen de garder cette puissance d'expression avec un moindre coût au runtime (je ne vois guère que l'augmentation de pression sur les caches de ce point de vue), mais surtout sans possibilité de garder le foncteur plus longtemps que l'appel.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    Oui. Tu as une couche d'effacement de type, ce qui donne la puissance d'expression mais elle a un coût. Templatiser le code est un moyen de garder cette puissance d'expression avec un moindre coût au runtime (je ne vois guère que l'augmentation de pression sur les caches de ce point de vue), mais surtout sans possibilité de garder le foncteur plus longtemps que l'appel.
    C'est quoi, pour toi, la "couche d'effacement de type" ? La templatisation ?
    Si oui, elle est déjà offerte par std::function.
    À partir de la parenthèse, je ne comprend plus grand chose à tes propos...

  5. #5
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par oodini Voir le message
    C'est quoi, pour toi, la "couche d'effacement de type" ? La templatisation ?
    Tu peux stocker un tas de chose dans un std::function qui n'a qu'un paramètre template: le prototype a utiliser lors de son appel. Il y a une couche qui permet de passer de ce tas de chose au simple prototype et cette couche ajoute au moins un niveau d'indirection aux appels faits par std::function (et de l'allocation dynamique, d'où les constructeurs avec allocateurs).
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    OK, merci.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/07/2011, 18h56
  2. Réponses: 4
    Dernier message: 30/10/2009, 11h45
  3. Réponses: 16
    Dernier message: 26/05/2009, 13h32
  4. Réponses: 4
    Dernier message: 04/02/2009, 16h08
  5. Réponses: 10
    Dernier message: 03/02/2005, 13h09

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