Template-Parameter in C ++
-
29-09-2019 - |
Frage
Angenommen, ich beliebige Template-Methode habe, welche Parameter erhalten könnte nach Wert und durch konstante Referenz (natürlich für triviale Typen und für Objekte entsprechend).
Wie wird diese Situation gehandhabt, wenn Template-Funktion Prototypen zu schreiben?
Ich könnte so etwas wie machen:
template <typename T> void Foo(T value) {
// Do something.
}
template <typename T> void Foo(const T& value) {
// Do something, yeah.
}
// Specialization for first prototype.
template <> void Foo<int>(int value) { }
// Specialization for second prototype.
template <> void Foo<Object>(const Object& value) { }
Aber dieser Ansatz ist nur in Ordnung für triviale Funktionen, die Handlung rein als Wrapper für einige anderen Anrufe.
Wenn die Funktion (Nicht-Templat-Version) hat eine Menge Code in es bedeutet dies, Ich würde zweimal um den Code zu kopieren.
Kann ich etwas schlauer hier?
Lösung
Nehmen Sie einfach durch konstante Referenz immer, weil es im Vorbeigehen primitive Typen als const Referenzen nicht viel Aufwand ist.
Andere Tipps
Schreiben Sie Ihre Template-Code für const
Referenzen nur und stützen sich auf den Compiler die Verweise entfernt zu optimieren.