std::enable_if Frage
-
Hallo,
template <typename T> std::ostream& operator<<(std::ostream& os, const T& response) { [...] return os; }Davon möchte ich nur eine Template Instanziierung haben wenn T eine Klasse ist.
template <typename T> typename std::enable_if<std::is_class<T>::value, T>::type operator<<(std::ostream& os, const T& response) { [...] return os; }... ist mein Ansatz bisher. Das habe ich aber nur aus der Doku herauskopiert, wirklich verstehen was da geschieht tue ich nicht. Es kompiliert so auch nicht.
Kann mir jemand sagen wie man es richtig macht (und optimalerweise auch erklären was das typename an dieser Stelle genau bewirkt etc.)
Grüße
-
Davon möchte ich nur eine Template Instanziierung haben wenn T eine Klasse ist.
Das macht keinen Sinn. Für alle arithmetischen Datentypen (und einige Zeiger) wurde
operator<<überladen und wird bei overload resolution bevorzugt. Warum also rausschmeissen wenn es wahrscheinlich eh nicht genommen wird?Der Grund warum es bei dir nicht klappt ist übrigens der dass das zweite Template-Argument
std::ostream&sein sollte (welches typename ..::type entspricht, deinem Rückgabetyp). Warum das typename da hin sollte wirst du mit etwas Googeln selbst herausfinden (Tipp: Schau auf Stackoverflow, dort gibt es eine gute Antwort.)