Was ist der richtige Weg, um mit (sonst) konstanten Funktionen umzugehen, die einen zufälligen Generatoraufruf von C++ 11 zufälliger Klasse beinhalten? Sollten Sie es vorziehen, das konstante Flag der Funktion aufzugeben, oder wäre es besser, Generator und Distribution als veränderliche Elemente Ihrer Klasse zu deklarieren? Ein minimales Beispiel (nicht kompilieren) könnte sein:Konstante Korrektheit und <random>
#include <random>
class foo
{
std::mt19937 MyGenerator;
std::normal_distribution<precision_type> gauss;
double get_rnd() const {return gauss(MyGenerator);}
};
Können Sie ein kleines Beispiel posten? Wenn die "random" -Instanz nicht versucht, eines der Mitglieder der Klasse zu ändern, und selbst kein Mitglied ist, kann die Funktion weiterhin "const" bleiben. – CoryKramer
@ Cyber: Basierend auf der Frage scheint es klar, dass die "zufällige" Instanz ein Mitglied ist (Frage sagte "Element"). –
Eine Überlegung kann Thread-Sicherheit sein. Die Const-Methode wird normalerweise als Thread-sicher behandelt. Wenn also der Aufruf durch Mutex geschützt ist, sieht es für mich aus, dass es ein veränderliches Mitglied ist, sonst nicht, wenn es eine geringe Chance auf Multithreading gibt. – dewaffled