Поэтому я пытаюсь использовать генератор Boost.Random mt19937 с шаблонами.Мой c ++ немного ржавый, но из всего, что я понимаю (а документ, как всегда для Boost, не менее, чем неопределенный), он должен принимать аргумент шаблона, который определяет тип возвращаемого значения (float / double).
Сейчас я понятия не имею, в чем проблема ... Все это работало с <double>
или <float>
и перестало работать с шаблоном.
Вот код:
template <class T>
class SpikingMatrixHelper {
public:
SpikingMatrixHelper(const int seed);
T generateNumber(const T, const T) const;
private:
boost::mt19937 gen;
};
template <class T>
SpikingMatrixHelper<T>::SpikingMatrixHelper(const int seed) : gen(seed) {}
template <class T>
T SpikingMatrixHelper<T>::generateNumber(const T min, const T max) const {
boost::uniform_real<T> dist(min, max);
boost::variate_generator<boost::mt19937&, boost::uniform_real<T> > g(gen, dist);
return g();
}
Это бросает вызов конструкции variate_generator
с
/path/ [line] error: no matching function for call to ‘boost::variate_generator<boost::random::mersenne_twister<unsigned int, 32, 624, 397, 31, 2567483615u, 11, 7, 2636928640u, 15, 4022730752u, 18, 3346425566u>&, boost::uniform_real<double> >::variate_generator(const mt19937&, boost::uniform_real<double>&)’
/path/ [line] note: candidates are:
/usr/include/boost/random/variate_generator.hpp:133:3: note: boost::variate_generator<Engine, Distribution>::variate_generator(Engine, Distribution) [with Engine = boost::random::mersenne_twister<unsigned int, 32, 624, 397, 31, 2567483615u, 11, 7, 2636928640u, 15, 4022730752u, 18, 3346425566u>&, Distribution = boost::uniform_real<double>]
/usr/include/boost/random/variate_generator.hpp:133:3: note: no known conversion for argument 1 from ‘const mt19937 {aka const boost::random::mersenne_twister<unsigned int, 32, 624, 397, 31, 2567483615u, 11, 7, 2636928640u, 15, 4022730752u, 18, 3346425566u>}’ to ‘boost::random::mersenne_twister<unsigned int, 32, 624, 397, 31, 2567483615u, 11, 7, 2636928640u, 15, 4022730752u, 18, 3346425566u>&’
/usr/include/boost/random/variate_generator.hpp:114:7: note: boost::variate_generator<boost::random::mersenne_twister<unsigned int, 32, 624, 397, 31, 2567483615u, 11, 7, 2636928640u, 15, 4022730752u, 18, 3346425566u>&, boost::uniform_real<double> >::variate_generator(const boost::variate_generator<boost::random::mersenne_twister<unsigned int, 32, 624, 397, 31, 2567483615u, 11, 7, 2636928640u, 15, 4022730752u, 18, 3346425566u>&, boost::uniform_real<double> >&)
/usr/include/boost/random/variate_generator.hpp:114:7: note: candidate expects 1 argument, 2 provided
Как я уже сказал, прошло уже некоторое время с тех пор, как я написал c ++, и документ Boost оставляет много вопросов, поэтому любые намекицениться ...