Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Vektor-Templates

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.12.2012, 15:42 Uhr
banshee



Hallo,

welchen Sinn haben denn diese beiden Templates:


C++:
template<typename T> struct VecHelper
{
    static T sqrt(T x)
    {
        return ::sqrt(x);
    }
};

template<> struct VecHelper<int>
{
    static int sqrt(int x)
    {
        return static_cast<int>(::sqrt(static_cast<float>(x)));
    }
};


Ist template<> ... nicht effektiv das Gleiche wie wenn man das template-Konstrukt ganz weglassen würde? Es gibt ja dann überhaupt keinen Template-Parameter...
Und wozu brauch man hier überhaupt ein eigenes int-Template? Würde ein int beim ::sqrt-Aufruf nicht automatisch in float konvertiert und durch den Template-Parameter bei der Rückgabe wieder automatisch in int?

Danke im Voraus und noch schöne verbleibende Feiertage
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.12.2012, 19:02 Uhr
banshee



Also ich habe jetzt schon mal rausgefunden, dass das zweite Template eine Spezialisierung des ersten ist. Kannte die Syntax vorher nicht. Trotzdem müssten beide Templates doch identisch für int sein oder nicht?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.12.2012, 08:27 Uhr
ao

(Operator)


Hmmm.....

in der C++-Standardbibliothek gibts sqrt-Überladungen für float, double und long double, aber nicht für Ganzzahltypen. Bei Zuweisung des Ergebnisses an eine Integer-Variable muss entweder explizit gecastet werden, oder man muss mit Compilerwarnungen rechnen ("precision loss" oder so ähnlich).

Das Konstrukt oben würde das verhindern. Allerdings könnte man dasselbe auch erreichen, indem man im globalen Namespace weitere Überladungen von sqrt mit den gewünschten Datentypen baut - das wäre um einiges einfacher. Oder geht das nicht aus einem Grund, den ich grad nicht sehe?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: