Heim > Artikel > Backend-Entwicklung > Warum führt das Vorlagenargument von „std::function“ zu Mehrdeutigkeiten bei der Überlastungsauflösung?
Mehrdeutigkeit im Vorlagenargument von Std::Function trotz Definition des Typs
In diesem Szenario sind jeweils mehrere Überladungen für die Funktion „a“ vorhanden Akzeptieren einer eindeutigen Signatur von std::function:
The Mehrdeutigkeit entsteht aufgrund der Tatsache, dass beide Funktionen
template<class _Fx> function(_Fx _Func, typename _Not_integral<!...int>::_Type = 0);
Im Wesentlichen kann jedes Objekt in eine std::function konvertiert werden, was das Löschen von Typen erleichtert und die Handhabung von ermöglicht beliebige Objekte als Funktionen.
Um das Problem weiter zu veranschaulichen, betrachten Sie das folgende vereinfachte Beispiel:
template<class Signature> class myfunc{ public: template<class Func> myfunc(Func a_func){ // ... } };
Wenn während der Überladungsauflösung für 'a' keine brauchbare Überladung identifiziert werden kann, wird der Compiler versucht, die Argumente entweder mit dem Konstruktor des Parameters oder mit dem Konvertierungsoperator des Arguments zu konvertieren. In diesem Fall erfolgt die Konvertierung über den Konstruktor von myfunc.
Da der Konstruktor von myfunc alles akzeptiert, sind sowohl die Funktion
Letztendlich führt dies dazu, dass der Compiler nicht bestimmen kann, welche Überladung von „a“ aufgerufen werden soll, was zu Mehrdeutigkeiten führt.
Zu Um dieses Problem zu lösen, haben Sie mehrere Möglichkeiten:
Das obige ist der detaillierte Inhalt vonWarum führt das Vorlagenargument von „std::function“ zu Mehrdeutigkeiten bei der Überlastungsauflösung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!