Ich lerne, wie man Schablonen in Verbindung mit Funktionsüberladung verwendet, aber ich kann nicht scheinen, es zu begreifen; Genauer gesagt, ich habe 2 Funktionen mit dem gleichen Namen, man akzeptiert 2 int-Parameter, die anderen 3 int-Parameter. Ich brauche sie, um jeweils einen Doppel-/Dreifachzeiger auf einen Typ zurückzugeben, der vom Funktionsaufrufer definiert werden sollte; Mit anderen Worten:C++ überladene Funktion und Vorlagen
template <typename T>
T** Foo(int p0, int p1){
T** ret = nullptr;
// ... do stuff with ret ...
return ret;
}
template <typename T>
T*** Foo(int p0, int p1, int p2){
T*** ret = nullptr;
// ... do stuff with ret ...
return ret;
}
int _tmain(int argc, _TCHAR* argv[])
{
double** d2 = Foo(1, 2);
double*** d3 = Foo(1, 2, 3);
int** i2 = Foo(1, 2);
int** i3 = Foo(1, 2, 3);
}
I erwartete d2 und i2 durch den ersten Foo(), d3 und i3 durch den zweiten zurückgeschickt werden; Stattdessen erhalte ich Fehler C2780 und C2783 von jedem der Aufrufe in main(). Was vermisse ich?
Was erwarten Sie 'T' in dieser Anrufe zu sein? – TartanLlama
Ich erwarte, dass T für die ersten beiden Aufrufe doppelt ist, int für die anderen 2 – gcaglion
Wie erwartet der Compiler das? Alles, was der Compiler verwenden kann, um die Template-Parameter herauszufinden, sind die Parameter für die Template-Funktion. –