Maison > développement back-end > C++ > Comment résoudre l'ambiguïté dans la surcharge du pointeur de fonction avec des expressions Lambda ?

Comment résoudre l'ambiguïté dans la surcharge du pointeur de fonction avec des expressions Lambda ?

Barbara Streisand
Libérer: 2024-11-20 00:20:03
original
522 Les gens l'ont consulté

How to Resolve Ambiguity in Function Pointer Overloading with Lambda Expressions?

Résoudre l'ambiguïté dans la surcharge du pointeur de fonction avec des expressions Lambda à l'aide de l'opérateur Unary Plus

La surcharge d'une fonction avec un pointeur de fonction et une fonction std::function peut conduire à une ambiguïté lorsque essayer de passer une expression lambda comme argument. Cette ambiguïté provient du fait que les expressions lambda peuvent être implicitement converties à la fois en pointeurs de fonction et en std::functions.

Pour résoudre cette ambiguïté, l'opérateur unaire plus ( ) peut être utilisé avant l'expression lambda. L'opérateur force la conversion du lambda en un type de pointeur de fonction, qui dans ce cas est void ()(). Cela permet à la résolution de surcharge de sélectionner sans ambiguïté la surcharge du pointeur de fonction de foo(void (f)()).

Le code suivant démontre l'utilisation de l'opérateur pour résoudre l'ambiguïté :

#include <functional>

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

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

En comprenant les règles de conversion de type pour les expressions lambda et l'effet de l'opérateur unaire plus, nous pouvons résoudre efficacement l'ambiguïté dans la surcharge du pointeur de fonction lors du passage d'expressions lambda comme arguments.

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