Maison >développement back-end >C++ >Pourquoi ma fonction Lambda récursive ne parvient-elle pas à se compiler et comment puis-je y remédier ?
Résoudre les problèmes de compilation avec les fonctions Lambda récursives
En essayant de définir une fonction lambda récursive, le code suivant ne parvient pas à se compiler :
auto sum = [term,next,&sum](int a, int b)mutable ->int { if(a>b) return 0; else return term(a) + sum(next(a),b); };
L'erreur vient de l'impossibilité d'utiliser "auto" lors de l'initialisation d'une fonction lambda qui se capture. L'inférence de type automatique ne peut pas déterminer le type de retour du lambda, car il dépend de ses variables capturées.
Pour résoudre ce problème, les étapes suivantes peuvent être suivies :
Utiliser un type d'objet de fonction entièrement spécifié :
std::function<int(int,int)> sum = [term,next,&sum](int a, int b)->int { if(a>b) return 0; else return term(a) + sum(next(a),b); };
La spécification du type d'objet de fonction élimine le besoin de saisie automatique inférence, permettant au compilateur de déterminer le type de retour avec précision.
Initialiser l'objet fonction plus tard :
std::function<int(int, int)> sum; sum = [term, next, &sum](int a, int b) -> int { if (a > b) return 0; else return term(a) + sum(next(a), b); };
Initialiser l'objet fonction sans une valeur initiale permet au compilateur de déduire son type dans l'instruction d'affectation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!