Nach N4295 C++ 17 wird mir erlauben, die Summe von einer unbekannten Anzahl von Argumenten so zu berechnen:Folding Ausdrücke in C++ 17 - Usecase für Vergleichsoperatoren
template<typename ... T>
int sum(T...t)
{
return (... + t);
}
Das Dokument heißt es ferner, ich könnte Operatoren wie == oder> anstelle von + verwenden. Kann jemand ein vernünftiges Beispiel dafür finden, wann ich == oder> in solch einem Konstrukt verwenden möchte?
(Ich weiß, dass die Menschen == und definieren> seltsame Dinge zu fremden Klassen zu tun, aber sicher, dass gegen gute Praxis. Schreiben a > b > c > d
ist so gut wie nie eine gute Idee, oder?)
Wenn Sie eine binäre Faltung mit einem speziellen Startelement verwenden, könnten Sie vielleicht '(apply_op() == ... == t)' sagen, um den Operator 'apply_op' zu machen ==' machen Sie das Recht Ding? –
Soweit ich mich erinnere, wurden unäre Falten für + entfernt. Sie müßten schreiben '(T {} + ... + t)' oder '(t + ... + T {})' (oder welcher Wert auch immer für Sie Sinn macht). – chris
@chris Sie wurden nur entfernt, wenn das Parameterpaket leer ist. Solange mindestens ein Element in "... t" ist, funktioniert die obige Funktion immer noch wie erwartet. – Morwenn