Est-il possible de passer une fonction lambda en fonction d'un certain type?Conversion de type pour lambda С ++
Par exemple, je
typedef double(*Function)(int, double);
Comment puis-je convertir une fonction lambda du type?
Est-il possible de passer une fonction lambda en fonction d'un certain type?Conversion de type pour lambda С ++
Par exemple, je
typedef double(*Function)(int, double);
Comment puis-je convertir une fonction lambda du type?
Vous pouvez utiliser std::function
au lieu d'un pointeur de fonction ordinaire. Cela permettrait de tenir lambdas même quand ils ont des captures:
#include <iostream>
#include <functional>
typedef std::function<double(int, double)> Function;
int main()
{
Function f;
int i = 4;
f = [=](int l, double d){ return i*l*d; };
std::cout << f(2, 3);
}
Pour un lambda sans état, cette conversion est disponible implicitement:
Function f = [](int, double) -> double {};
Si vous voulez juste convertir l'expression lambda lui-même, vous pouvez utiliser l'opérateur +
unaire pour y parvenir:
auto* p = +[](int, double) -> double {}; // p is of type double(*)(int, double)
Un lambda avec une capture n'offre pas une telle conversion, puisqu'il n'est pas sémantiquement équivalent à une fonction (sans état) (ceci s'applique même dans le cas d'une capture par défaut qui ne finit pas par capturer quoi que ce soit).
_ "unaire + opérateur" _ C'est génial! (Comme mentionné [ici] (https://stackoverflow.com/questions/46283731/a-function-definition-is-not-allowed-here-before-token#comment79533605_46283731) il y a encore des points blancs à explorer sur les cartes) . – user0042
@ user0042 - C'est génial. Mais malheureusement, un certain compilateur grand public, qui restera sans nom, [étouffe toujours dessus] (http://rextester.com/BQND42154). – StoryTeller
Voir https://stackoverflow.com/a/17822241/801894 pour une explication plus détaillée de l'option unary +. –
Il est logique que pour les lambdas sans valeurs fermées –
Pourquoi utilisez-vous 'typedef' en ce jour et l'âge? –
Voir [Passer lambda comme pointeur de fonction] (https://stackoverflow.com/q/28746744/1708801) –