Vermeiden Sie das exponentielle Anwachsen von const-Referenzen und r-Wert-Referenzen im Konstruktor

Ich programmiere einige Klassen mit Vorlagen für eine maschinelle Lernbibliothek und stehe diesem Problem häufig gegenüber. Ich verwende hauptsächlich das Richtlinienmuster, bei dem Klassen als Vorlagenargument Richtlinien für verschiedene Funktionen erhalten, zum Beispiel:

template <class Loss, class Optimizer> class LinearClassifier { ... }

Das Problem liegt bei den Konstruktoren. Mit zunehmender Anzahl von Richtlinien (Vorlagenparametern) nehmen die Kombinationen von const-Referenzen und r-Wert-Referenzen exponentiell zu. Im vorherigen Beispiel:

LinearClassifier(const Loss& loss, const Optimizer& optimizer) : _loss(loss), _optimizer(optimizer) {}

LinearClassifier(Loss&& loss, const Optimizer& optimizer) : _loss(std::move(loss)), _optimizer(optimizer) {}

LinearClassifier(const Loss& loss, Optimizer&& optimizer) : _loss(loss), _optimizer(std::move(optimizer)) {}

LinearClassifier(Loss&& loss, Optimizer&& optimizer) : _loss(std::move(loss)), _optimizer(std::move(optimizer)) {}

Gibt es eine Möglichkeit, dies zu vermeiden?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage