Ich habe eine Template-Funktion, func
:Wie mache ich die Vorlagentyp-Abzug arbeiten mit Referenzen?
template<typename T>
void func(T p) { f(p); }
Und eine Reihe von Funktionen f
:
f(SomeType&);
f(int);
...
Wenn ich instanziiert die Template-Funktion, func
, eine Referenz als Funktion Argument p
, ohne explizit Wenn der Vorlagenparameter T
angegeben wird, ist der abgeleitete Typ nicht der Referenztyp von p
, sondern der Typ ist ein Verweis auf zum Beispiel:
SomeType s;
SomeType& ref_to_s = s;
func(ref_to_s); // Type deduction results in: func<SomeType>(ref_to_s)
func<SomeType&>(ref_to_s); // Need to explicitly specify type to work with reference
Also, meine Fragen sind:
- Warum der Compiler nicht den Referenztyp
SomeType&
in der obigen Situation abzuleiten? - Gibt es eine Möglichkeit, Vorlagenfunktion
func
zu definieren, so dass Typableitung mit einem Referenztyp ohne explizite Angabe des VorlagenparametersT
funktioniert?
Um klar zu sein, würde Ich mag etwas mit den beiden Arbeits (Funktionen f
siehe oben):
func(ref_to_s); // Calls func<SomeType&>(ref_to_s)
func(1); // Calls func<int>(1)
Offensichtlich funktioniert das Template Argument Abzug. – 101010