Ich habe ein Problem mit dem Überladen einer Funktion, die eine Vorlage als Eingabe erhält. Ich habe eine Vorlage Vektor:Funktion Überladung mit einer Vorlage Klasse
template TempVec<class T, int size>
, die zwei Optionen: Vektor von int nach Größe 3 oder einen Vektor von komplexen nach Größe 2.
Ich habe eine Funktion InnerProduct
genannt, die zwei Vektoren und kehrt bekommt das Ergebnis der inneren Produkte zwischen den Vektoren. Das Problem ist, dass der Typ des Rückgabewerts vom Typ des Vektors abhängt (int
/complex
).
Also habe ich diese drei Funktionen (in der Klasse von TempVec):
template <class T, int size>
friend int InnerProduct(const TempVec<T, 3>& v1, const TempVec<T, 3>& v2);
template <class T, int size>
friend complex InnerProduct(const TempVec<T, 2>& v1, const TempVec<T, 2>& v2);
template <class T, int size>
friend TempVec<T, size> InnerProduct(const TempVec<T, size>& v1, const TempVec<T, size>& v2);
Als ich InnerProduct
nennen, ich auf die letzte Funktion bekommen immer (die allgemeinste Funktion), auch wenn ich zwei Vektoren passieren der Größe 3 oder zwei Vektoren der Größe 2. habe ich versucht, die letzte Funktion, um loszuwerden, aber ich habe den Fehler:
'InnerProduct': none of the 2 overloads could convert all the argument types.
würde ich nach einer Erklärung/Lösung des Problems sehr dankbar.