"statische" klasse



  • diesen code habe ich mir gestern angesehen, was sagt ihr dazu?
    quelle: magic engine

    #ifndef MGCMATH_H
    #define MGCMATH_H
    
    #ifdef MGC_USE_DOUBLE
        typedef double MgcReal;
    #else
        typedef float MgcReal;
    #endif
    
    class MgcMath
    {
    public:
        static int IAbs (int iValue);
        static int ICeil (float fValue);
        static int IFloor (float fValue);
        static int ISign (int iValue);
    
        static MgcReal Abs (MgcReal fValue);
        static MgcReal ACos (MgcReal fValue);
        static MgcReal ASin (MgcReal fValue);
        static MgcReal ATan (MgcReal fValue);
        static MgcReal ATan2 (MgcReal fY, MgcReal fX);
        static MgcReal Ceil (MgcReal fValue);
        static MgcReal Cos (MgcReal fValue);
        static MgcReal Exp (MgcReal fValue);
        static MgcReal Floor (MgcReal fValue);
        static MgcReal Log (MgcReal fValue);
        static MgcReal Pow (MgcReal kBase, MgcReal kExponent);
        static MgcReal Sign (MgcReal fValue);
        static MgcReal Sin (MgcReal fValue);
        static MgcReal Sqr (MgcReal fValue);
        static MgcReal Sqrt (MgcReal fValue);
        static MgcReal UnitRandom ();  // in [0,1]
        static MgcReal SymmetricRandom ();  // in [-1,1]
    
        static const MgcReal INFINITY;
        static const MgcReal PI;
        static const MgcReal TWO_PI;
        static const MgcReal HALF_PI;
    };
    
    #endif
    

    waere es nicht besser in diesem fall nur einen namespace zu verwenden?



  • Ich denke denke der compilier erkennt das vieleicht und mach dann sowieso keinen unterschiede
    Aber von codestyle her ist namespace auf jedenfall besser.
    mfg



  • Ich würde ein Namespace nehmen. Du bist aber mit deinem MgcReal nicht ganz konsistent.



  • auf jedenfall wäre ein namespace schöner gewesen, seit wann schreibt man funktionsnamen eigentlich groß?

    using namespace mgc;
    ...
    static Real abs(Real value)
    ...
    

    eindeutig schöner :p



  • der code ist nicht von mir
    ist aus dem Buch "3D Game Engine Design"



  • Sehr bizarr. Und was kann MgcMath::Pow dann, was std::pow nicht kann? Sieht irgendwie nach altem Do-It-Yourself-C+ aus...



  • Hmmmm. In ner Klasse kann man sich dann kleine Hilfsfunktionen einbauen, die private sind.
    Erstmal ist hier IMHO eher die Frage, ob 'in ne Klasse' oder 'nicht in ne Klasse'. Und nicht 'Klasse vs namespace'.
    Dass das ganze Teil nachher nicht im globalen namespace flackt, ist doch sowieso klar. Dies betrachtend muss ich feststellen, dass mir eine Klasse eigentlich besser gefallen würde.
    Das Problem ist nur die hässliche Benutzung. Da C++ keine static imports kennt, muss ich jedesmal Math::sqrt() schreiben und das suckt. Und das kann ich aus Erfahrung sagen, weil Java bis 1.5 keine static imports hatte.

    Wahrscheinlich ist 'nicht in ne Klasse' deshalb schöner.



  • Optimizer schrieb:

    Hmmmm. In ner Klasse kann man sich dann kleine Hilfsfunktionen einbauen, die private sind.

    du kannst auch unnamed namespaces verwenden, wenn du funktionen privat für eine UE brauchst.

    Dass das ganze Teil nachher nicht im globalen namespace flackt, ist doch sowieso klar. Dies betrachtend muss ich feststellen, dass mir eine Klasse eigentlich besser gefallen würde.

    versteh ich nicht.

    Das Problem ist nur die hässliche Benutzung. Da C++ keine static imports kennt, muss ich jedesmal Math::sqrt() schreiben und das suckt. Und das kann ich aus Erfahrung sagen, weil Java bis 1.5 keine static imports hatte.

    Wahrscheinlich ist 'nicht in ne Klasse' deshalb schöner.

    ja.



  • davie schrieb:

    versteh ich nicht.

    Wenn ich die Funktionen statisch in ne Klasse mache, bleibt die Klasse bei mir trotzdem nicht im globalen Namensraum stehen. Deshalb in irgendeinem namespace kommt das Ding auf jeden Fall, die Frage ist nur, ob dort noch innerhalb einer Klasse. Das wollte ich klarstellen.
    Wenn man ohne Klassen auch Funktionen verstecken kann, find ich das auch ok, das wusste ich nicht.



  • davie schrieb:

    multiple exclamation marks - a sure sign of a diseased mind!!!1

    WIESO ?????????? 😉



  • ok, alles klar 🙂



  • multiple exclamation marks - a sure sign of a diseased mind!!!1

    eigentlich heissts ja eher:

    "multiple exclamation marks are a sure sign of a diseased mind" - Terry Pratchett

    mfg korrektor ähhh Otze 😉



  • wo?



  • diesen ausspruch soll er mal in einem interview oder so gebracht haben

    //edit falsch kommt hieraus:

    http://www.sf-fan.de/sf-buch/rezension/eric.html

    und hier nochn paar gute zitate:
    http://quotes.prolix.nu/Authors/?Terry_Pratchett,_"Feet_of_Clay"


Log in to reply