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 ?
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 ?
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.
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.
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager