Maison >développement back-end >C++ >Comment puis-je créer une « std :: fonction » à partir d'un Lambda de capture de mouvements ?
Création d'une fonction std::fonction à partir d'un Lambda de capture de mouvement
Création d'une fonction std::fonction à partir d'un type de déplacement uniquement, tel en tant que lambda de capture de mouvement, peut entraîner des erreurs en raison de la restriction du constructeur de déplacement. Cette restriction découle de la façon dont std::function est défini et construit.
Comprendre le constructeur std::function
Le constructeur std::function peut être appelé dans de deux manières :
Dans les deux cas, le lambda (F) doit être CopyConstructible. Cela signifie que vous ne pouvez pas déplacer le lambda directement dans la fonction std::.
De plus, Operator = est défini en termes de constructeur et de swap, ce qui signifie que les mêmes restrictions s'appliquent.
Conséquences pour les types à déplacement uniquement
Par conséquent, il n'est pas possible de construire une fonction std::à partir d'un lambda de capture de mouvements qui capture un type de déplacement uniquement. Tenter de le faire entraînera une erreur de compilation en raison du constructeur de copie supprimé implicitement.
Solution alternative
Pour contourner ce problème, vous pouvez utiliser un shared_ptr pour envelopper le type de déplacement uniquement, puis capturer le shared_ptr dans votre lambda. Le shared_ptr garantira que le type est copiable, vous permettant de créer une fonction std::à partir du lambda.
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!