Détermination des types de paramètres et de retour des expressions Lambda
Étant donné une expression lambda, il peut être difficile de déterminer ses paramètres et ses types de retour. Cet article explique comment extraire ces informations à l'aide de traits lambda.
En C 11, les expressions lambda sont introduites et peuvent être utilisées dans divers scénarios. Un cas d'utilisation potentiel consiste à transmettre des lambdas comme arguments aux modèles de fonction, mais pour réussir cela, il est crucial de connaître le paramètre lambda et les types de retour.
Au départ, les tentatives d'utilisation std::function pour représenter les expressions lambda rencontrées erreurs. Cependant, l'introduction de lambda_traits fournit une solution plus robuste. En utilisant le decltype de l'opérateur lambda (), lambda_traits peut déterminer les types de paramètres.
L'extrait de code suivant illustre comment les traits lambda peuvent être utilisés pour extraire des informations de type à partir d'une expression lambda :
template <typename TLambda> void f(TLambda lambda) { typedef typename lambda_traits<TLambda>::param_type P; typedef typename lambda_traits<TLambda>::return_type R; std::function<R(P)> fun = lambda; // Construct the std::function object }
Dans cet exemple de scénario, le modèle de fonction f accepte un lambda comme argument et utilise les traits lambda pour déduire son paramètre et renvoyer types.
Pour les lambdas génériques qui ne spécifient pas de types explicites, comme [](auto x) {}, cette approche ne fonctionnera pas. Néanmoins, les traits lambda s'avèrent efficaces pour les lambdas avec des paramètres et des types de retour définis.
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!