Ich habe eine Funktion foo
nehmen einen Parameter als Referenz, und ich will es anders auf Rvalue und auf lvalue Referenzen zu handeln. (Es ändert sich nicht die refered-to-Wert, möchte ich hinzufügen) Ich weiß, dass, wenn ich schreibe:Wie erhalten Sie verschiedene Überladungen für Rvalue und Lvalue Referenzen mit einem Template-abgeleiteten Typ?
template <typename T> foo(T&& x);
ich forwarding reference erklärt habe, anstatt rvalue Referenz, dass diese Art und Weise Sinn:
template <typename T> foo(const T& x);
template <typename T> foo(T&& x);
wahrscheinlich werde ich nicht bekommen, was ich will.
Meine Frage ist also: Was ist der richtige Weg, um unterschiedliches Verhalten zwischen den beiden Arten von Referenzen zu beeinflussen?
Können Sie ein Beispiel dafür angeben, dass eine Weiterleitungsreferenz nicht Ihren Wünschen entspricht? – Barry
@Barry: Zuweisen von Heap-Speicher für eine R-Wert-Referenz, Zuweisung von nichts für L-Wert-Referenz - damit sie in irgendeiner Art von Callback verwendet werden können. – einpoklum
Ist das nicht der normale Weg, dies zu tun, wenn Benutzer einen Verweis auf einen Handler wünschen, übergeben sie ihn in einem std :: ref? –