Ich versuche eine Funktion zu schreiben, die die Elemente eines Containers summiert. Dieser Container kann Vektor, Liste, Warteschlange usw. sein. Deshalb habe ich Vorlagen ausprobiert.
Leider bekomme ich diesen Fehler:
'C' ist keine Vorlage
Quelle:
%Vor%Was mache ich falsch? Wie sollte ich es beheben?
Der spezielle Fehler, den Sie bekommen, ist, weil Sie ein Template-Template-Argument benötigen:
%Vor%Die Standardcontainer haben jedoch normalerweise mehr als nur ein Template-Argument:
%Vor%und es ist ein bisschen nicht trivial, solche Funktionen richtig zu schreiben. Sie könnten variadische Vorlagenargumente verwenden, oder Sie könnten wie die Standardbibliothek tun, und nur so viel spezialisieren, wie Sie wirklich brauchen:
%Vor%In Ihrem Fall (indem Sie so tun, als ob Ihr Bedarf nicht schon von der Standardalgorithmusbibliothek abgedeckt ist):
%Vor%Es gibt einige Unterschiede zu Ihrem ursprünglichen Code:
T s = null;
) it
) Wenn Sie einen init
-Parameter hinzufügen, können Sie fast noexcept
:
Aber nur fast, weil init += *begin
noch werfen könnte.
Wenn Sie eine solche Signatur haben, haben Sie übrigens die Signatur von std::accumulate
reproduziert.
Sie könnten das Ganze in Form eines Iteratortyps ausdrücken und iterator_traits
verwenden, um den value_type zu erhalten:
Im wirklichen Leben verwenden Sie std :: accumulate :
%Vor%Tags und Links c++ function templates parameters iterator