Heim > Backend-Entwicklung > C++ > Wie löst man Mehrdeutigkeiten in überladenen Funktionen auf, wenn Lambdas als Argumente in C übergeben werden?

Wie löst man Mehrdeutigkeiten in überladenen Funktionen auf, wenn Lambdas als Argumente in C übergeben werden?

Linda Hamilton
Freigeben: 2024-11-19 07:40:03
Original
995 Leute haben es durchsucht

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

Mehrdeutigkeit in überladenen Funktionen für Lambdas auflösen

In C kann es beim Aufrufen einer Funktion mit einem Lambda als Argument zu Mehrdeutigkeiten kommen, wenn mehrere Überladungen vorhanden sind, die mit dem übereinstimmen Lambda-Typ. Dies kann zu Kompilierungsfehlern führen.

Bedenken Sie den folgenden Code:

#include <functional>

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

int main()
{
    foo([](){}); // ambiguous
}
Nach dem Login kopieren

In diesem Code gibt es zwei Überladungen von foo: eine, die eine std::function

Um diese Mehrdeutigkeit aufzulösen, können Sie den unären Plusoperator ( ) vor dem verwenden Lambda, wie unten gezeigt:

foo(+[](){}); // not ambiguous (calls the function pointer overload)
Nach dem Login kopieren

Der Plus-Operator erzwingt die Konvertierung des Lambda in einen Funktionszeiger, wodurch die zweite Überladung von foo genau abgeglichen und ohne aufgerufen werden kann Mehrdeutigkeit.

Dieses Verhalten ergibt sich aus der Fähigkeit des unären Plus-Operators, bestimmte Typen, einschließlich Lambdas, in Funktionszeiger umzuwandeln. Diese Konvertierungsfunktion ist wie folgt definiert:

The operand of the unary + operator shall have arithmetic, unscoped enumeration, or pointer type, and the result is the value of the argument.
Nach dem Login kopieren

Da der Verschlusstyp des Lambda eine Konvertierungsfunktion in einen Funktionszeiger hat, konvertiert der unäre Plusoperator das Lambda in den gewünschten Funktionszeigertyp und ermöglicht so eine genaue Übereinstimmung Überlastungsauflösung.

Das obige ist der detaillierte Inhalt vonWie löst man Mehrdeutigkeiten in überladenen Funktionen auf, wenn Lambdas als Argumente in C übergeben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage