Boost-Zufallsgenerator in eigener Klasse bereit machen?



  • Hallo,

    ich will mir eine Klasse bauen, die einen Zufallsgenerator hat, bestehend aus diesen Klassen:

    • boost::mt19937
    • boost::uniform_int<>
    • boost::variate_generator<boost::mt19937&, boost::uniform_int<> >

    Wenn ich meine Klasse nun instanziere, will ich in der Element-Initalisiererliste des Konstruktors natürlich gleich die Boost-Objekte initalisieren.

    Das Problem: Bevor ich den variate_generator initalisieren kann, müssen bereits die anderen beiden Objekte initalisiert sein. Für die Element-Initalisiererliste ist aber nicht definiert, in welcher Reihenfolge sie ausgewertet wird.

    Was kann man da noch tun? Als einziges würde mir einfallen, den variate_generator auf dem Heap anzulegen, damit ich den variate_generator praktisch erst im Konstruktor-Rumpf erzeugen muss. Ist nur bisschen hässlich, weil ich dann eben ein Element auf dem Heap hab...



  • Ich kenne mich mit der genauen Reihenfolge der Initialisierungen nicht aus, weil ich damit nie Probleme hatte, aber dieser Ausschnitt aus einem Tutorial sagt was anderes:

    http://ladedu.com/cpp/kapitel9_reihenfolge_der_elementinitialisierung



  • Oh ja, stimmt. Da habe ich wohl etwas durcheinander gebracht, so wie es im Tutorial steht, ist es korrekt.

    http://www.kuzbass.ru:8086/docs/isocpp/special.html#class.base.init schrieb:

    Then, nonstatic data members shall be initialized in the order they were declared in the class definition (again regardless of the order of the mem-initializers).

    Gut, damit wäre das Problem ja schon gelöst. 🙂

    Danke.


Anmelden zum Antworten