Ich stieß beim Lesen der Codebasis einer Bibliothek auf Folgendes. + = Operator auf einem Paar und make_pair mit Vorlagen
map <const string, pair<int, double>> errorMap;
und der relevante Teil des Codes Wesens
:errorMap
wird, wie in der unten definierten Code verwendet
errorMap["substitutions"] += make_pair<int,double>(targetLength, substitutions);
errorMap["insertions"] += make_pair<int,double>(targetLength, insertions);
errorMap["deletions"] += make_pair<int,double>(targetLength, deletions);
Der obige Teil this Kompilierungsfehler wirft. Wenn die Bibliothek über ihr eigenes Build-System ausgeführt wird, scheint der Code zu kompilieren. Kann jemand etwas Licht auf das werfen, was genau hier passiert?
PS: Ich habe bereits die Paar-Dokumentation an cppreference und anderen Standorten betrachtet, keiner von ihnen einen +=
Operator für ein Paar angeben. Dies ist das erste Mal, dass ich auf eine make_pair
mit Vorlagenvorlagen stoße, auf der ich auch keine weiteren Informationen finden kann.
Vielleicht haben sie ihren eigenen Operator definiert + =? – immibis
Unwahrscheinlich, außer es ist möglich, das Paar 's + = Operator zu überlasten. Ist das möglich? –
jerin
Ich denke, der Fehler ist, weil 'make_pair' die perfekte Weiterleitung verwendet, die nur funktioniert, wenn es den Typ ableitet. Durch die Angabe der Typen akzeptiert es nur rvalues. Ich weiß nicht, warum der Fehler weggehen würde. –