Maison > développement back-end > C++ > le corps du texte

Comment résoudre l'ambiguïté dans les fonctions surchargées lors du passage de Lambdas comme arguments en C ?

Linda Hamilton
Libérer: 2024-11-19 07:40:03
original
937 Les gens l'ont consulté

How to Resolve Ambiguity in Overloaded Functions When Passing Lambdas as Arguments in C  ?

Résoudre l'ambiguïté dans les fonctions surchargées pour les Lambdas

En C, lors de l'appel d'une fonction avec un lambda comme argument, une ambiguïté peut survenir s'il existe plusieurs surcharges qui correspondent au le type de lambda. Cela peut entraîner des erreurs de compilation.

Considérez le code suivant :

#include <functional>

void foo(std::function<void()> f) { f(); }
void foo(void (*f)()) { f(); }

int main()
{
    foo([](){}); // ambiguous
}
Copier après la connexion

Dans ce code, il y a deux surcharges de foo : l'une prenant un std::function

Pour résoudre cette ambiguïté, vous pouvez utiliser l'opérateur unaire plus ( ) avant le lambda, comme indiqué ci-dessous :

foo(+[](){}); // not ambiguous (calls the function pointer overload)
Copier après la connexion

L'opérateur plus force la conversion du lambda en pointeur de fonction, permettant à la deuxième surcharge de foo de correspondre exactement et d'être appelée sans ambiguïté.

Ce comportement découle de la capacité de l'opérateur unaire plus à convertir certains types, y compris les lambdas, en pointeurs de fonction. Cette fonction de conversion est définie comme suit :

The operand of the unary + operator shall have arithmetic, unscoped enumeration, or pointer type, and the result is the value of the argument.
Copier après la connexion

Étant donné que le type de fermeture du lambda a une fonction de conversion en pointeur de fonction, l'opérateur unaire plus convertit le lambda en type de pointeur de fonction souhaité, permettant une correspondance exacte dans résolution de surcharge.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal