Mehrdeutigkeit in std::function Template-Argumentsignaturen
Die Mehrdeutigkeit entsteht, wenn sowohl function
Um dies zu veranschaulichen, betrachten Sie die Klasse:
<code class="cpp">template<class Signature> class myfunc{ public: template<class Func> myfunc(Func a_func){ // ... } };</code>
Wenn der Compiler versucht, brauchbare Funktionen für einen Überladungssatz zu finden, sucht er nach möglichen Konvertierungen. In diesem Fall akzeptieren beide Konstruktoren von myfunc alles, was die Konvertierung von int(*)() nach myfunc
Wenn der Compiler also a(x) oder a(y) aufruft, stößt er auf zwei realisierbare Funktionen, was zu Mehrdeutigkeiten führt.
Auflösung
Die Vorlagenargumentsignatur von std::function ist Teil ihres Typs beim Deklarieren und Definieren von Funktionen. Während der Objektkonstruktion wird die Signatur jedoch ignoriert.
Um die Mehrdeutigkeit zu umgehen, kann man:
Das obige ist der detaillierte Inhalt vonWarum führt „std::function' zu Mehrdeutigkeiten in den Signaturen von Vorlagenargumenten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!