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.