Warum bieten manche STL-Algorithmen eine zusätzliche "_if" -Funktion, anstatt sie zu überladen? [Duplikat]

7

Warum bieten einige STL-Algorithmen eine zusätzliche Funktion '_if' , anstatt sie zu überlasten?

%Vor%

Könnten sie nicht einfach diese Algorithmen überladen haben, anstatt zusätzliche _if -Funktionen zu erstellen?

    
alberto 19.05.2015, 22:25
quelle

2 Antworten

11

Diese Algorithmen stellen eine benannte Version statt einer überladenen Version zur Verfügung, da beide Versionen des Algorithmus die gleiche Anzahl von Argumenten haben. Überladen von Unklarheiten wäre daher möglich.

Um mögliche Mehrdeutigkeiten zu vermeiden, bietet die Bibliothek separate benannte Versionen für diese Algorithmen, find_if ist eine davon.

    
Andreas DM 19.05.2015, 22:27
quelle
18

Es ist nicht klar, wie die Überladungsauflösung generisch funktionieren würde. Was ist, wenn der Container beispielsweise Prädikate enthält?

%Vor%

Diese mögliche Ambiguität wird vermieden, indem Funktionen mit unterschiedlichen Namen verwendet werden, wobei jeder Name die Absicht deutlicher ausdrückt.

Beachten Sie, dass dies eine Vereinfachung ist: Es gibt keine Anforderung in std::find , dass das Referenzobjekt vom selben Typ wie der value_type des Containers ist, nur dass sie für die Gleichheit vergleichbar sind. Die Anforderungen für das Prädikat in std::find_if sind ähnlich generisch. Beide Funktionen sind sehr generisch, was dazu führen kann, dass eine Mehrdeutigkeit leichter als im Beispiel gegeben ist. Zum Beispiel

%Vor%     
juanchopanza 19.05.2015 22:28
quelle

Tags und Links