Cet article aborde le défi de la conversion d'une expression lambda de paramètres et de types arbitraires dans un objet std::function à l'aide de modèles. Malgré des tentatives répétées, l'auteur a rencontré des obstacles avec des approches à la fois directes et basées sur des modèles.
La motivation derrière cette conversion vient de l'implémentation du curry en C via des modèles variadiques. Cependant, cette technique devient problématique lorsqu'on tente de passer un lambda comme argument à une fonction variadique.
Le principal défi réside dans l'incapacité de la déduction de type de modèle à déduire l'argument de modèle correct pour std::function basé uniquement sur l'expression lambda. En effet, la déduction de type de modèle ne prend pas en compte les conversions de type.
Une solution de contournement consiste à encapsuler l'argument lambda dans un type d'identité. Cela permet au compilateur d'ignorer la dépendance du lambda lors de la déduction de type. Cependant, cette approche nécessite des paramètres supplémentaires, qui peuvent ne pas correspondre au cas d'utilisation souhaité.
Dans les situations où la spécification explicite des paramètres du modèle n'est pas souhaitable et où aucun autre argument déductible n'est disponible, il devient impossible pour le compilateur de déduire le type de modèle std::function souhaité. Cette limitation empêche la conversion directe des lambdas en objets std::function sans spécification explicite de paramètres ni arguments supplémentaires.
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!