Klasse mit statischen Funktionen, Konstruktor



  • Hallo,

    ich habe eine Klasse mit statischen mathematischen Funktionen, die rand() nutzen (bitte keine diskussion über die statischen funktionen, dass muss vom projekt her so sein ⚠ )

    Na ja, ansich sollte man ja srand() aufrufen, mit einem Seed. Das einzige was mir einfällt, wäre ein Singleton der dann bei der ersten erzeugung srand aufruft. Ansonsten halt mit einer booleschen variable in den statischen funktionen prüfen, ob schonmal srand() aufgerufen wurde.

    Geht das nicht besser ?



  • Wieso müssen die denn statisch sein?

    In deinem Topic steht etwas von Singleton. Wenn diese Klasse ein Singleton wäre, könntest du srand dann dort aufrufen, wo die einzige Instanz der Klasse erstellt wird, da bräuchtest Du keine weitere Abfrage.


  • Mod

    Du kannst auch so etwas fieses machen, dann wird srand automatisch beim Programmstart aufgerufen:

    int srander()
    {
     srand(/*gewünschter Seed*/)
     return 0;
    }
    
    // Globale Variable:
    int dummy=srander();
    

    Geht bestimmt auch irgendwie eleganter, habe ich gerade auf die Schnelle hingefrickelt.

    Ansonsten: Bastel dir eine Zufallsgeneratorklasse, nutz eine der zahlreichen fertigen Lösungen oder schau mal ob dein Compiler schon die Zufallsgeneratorklassen aus dem nächsten Standard unterstützt.



  • ich werds nun über eine weitere static-methode lösen, die der anwender dann halt vorher aufrufen muss. erscheint mir "am schönsten". Ab und an werden halt Rahmenbedingungen einfach vorgegeben, an die ich mich halten muss 😉



  • Staticer schrieb:

    Ab und an werden halt Rahmenbedingungen einfach vorgegeben, an die ich mich halten muss 😉

    Hast du nachgefragt, um dich an die vorgegebenen Rahmenbedingungen zu halten?

    Ich würde das nicht machen, Benutzer werden das sicher vergessen. Entweder du nimmst SeppJs Variante (wobei es da Probleme geben könnte, wenn die globale Variable noch nicht mit dem srander() -Wert initialisiert ist) oder eine leichte Variation davon. bool -Flag ist auch eine Möglichkeit. Hauptsache du kannst nachher ein random() oder so aufrufen, das selbst für die Initialisierung sorgt, sodass der Anwendercode frei von if s ist.


Anmelden zum Antworten