Template Probleme
-
Folgende Definition
template<class T> complex<T> inline mathext::Expi (const double wt) { return complex<T>(cos(wt),sin(wt)); }liefert mir bei diesem Code
double c1 = 1.0; complex<double> test = Expi(c1);den Fehler
1>.\src\DialogSimpleHologramm.cpp(60) : error C2784: "std::complex<_Other> mathext::Expi(const std::complex<_Other> &)": template-Argument für "const std::complex<_Other> &" konnte nicht von "double" hergeleitet werden.
1> e:\Daten\Dev\SVN\hibiscus\Cpp\QBeamShaping\QBeamShaping\include\Common\mathext.h(70): Siehe Deklaration von 'mathext::Expi'
1>.\src\DialogSimpleHologramm.cpp(60) : error C2783: "std::complex<_Other> mathext::Expi(const double)": template-Argument für "T" konnte nicht hergeleitet werden.
1> e:\Daten\Dev\SVN\hibiscus\Cpp\QBeamShaping\QBeamShaping\include\Common\mathext.h(69): Siehe Deklaration von 'mathext::Expi'was mache ich falsch ?
-
=>
template<class T> inline complex<T> mathext::Expi (const T wt) { return complex<T>(cos(wt),sin(wt)); }
-
Der Rückgabetyp von Expi ist complex<T> udn damit abhängig vom templateparameter. Auf der anderen Seite ist der parameter von Expi immer double und NICHT abhängig vom templateparameter. Daher gibts keine Möglichkeit, aus den Argumenten der Funktion den Templateparameter abzuleiten -> du musst den Parameter explizit angeben.
Ich vermute mal ganz stark, dass wt eigentlich nicht immer ein double sein soll sondern ein T:
template<class T> inline complex<T> mathext::Expi (const T wt) //<<< hier T statt double { return complex<T>(cos(wt),sin(wt)); }Dann klappts auch mit der template argument deduction
