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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top