У меня есть простой константный метод, который хочет, чтобы сгенерировать случайное числоC++ TR1: Каков правильный способ использования равномерного распределения для генерации случайного числа в методе const?
int Object::const_method() const {
std::tr1::uniform_int<int> uni(0,100);
// do some calculation
return result;
}
Это приводит к вашему стандарту (если templafied) Const ошибки нарушения
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.5.1/../../../../include/c++/4.5.1/tr1/random.tcc:910:4: error: passing ‘const std::tr1::mersenne_twister’ as ‘this’ argument of ‘result_type std::tr1::mersenne_twister<_UIntType, __w, __n, __m, __r, __a, __u, __s, __b, __t, __c, __l>::operator()() [with _UIntType = long unsigned int, int __w = 32, int __n = 624, int __m = 397, int __r = 31, _UIntType __a = 2567483615ul, int __u = 11, int __s = 7, _UIntType __b = 2636928640ul, int __t = 15, _UIntType __c = 4022730752ul, int __l = 18, result_type = long unsigned int]’ discards qualifiers
Является ли это выполнимо без const_cast
на this
?
Если ваш PRNG является элементом данных, тогда сделайте его «изменчивым» или удерживайте указатель вместо объекта. –
Опубликуйте полный исходный код. По внешнему виду ошибки ваша проблема находится в части «// сделать некоторые вычисления», которую вы исключили. А именно часть, в которой вы используете объект _uni_. – Akusete
Кстати: вы никогда не должны использовать const casting, если не уверены, что переменная, о которой идет речь, никогда не записывается, иначе поведение не определено и ** WILL ** ломается с оптимизацией/многопоточным. – Akusete