2013-07-17 44 views
1

我想創建一個基於http://www.sitmo.com/article/generating-random-numbers-in-c-with-boost/助推隨機數發生器的包裝類。問題在於boost使用模板,我不知道如何將GEN gen的聲明從實例化中分離出來,就像從dist = DIST(0, 1)中分離DIST dist一樣。任何意見讚賞。結合助推隨機數發生器作爲類變量

fr.hpp:

#include <boost/random/variate_generator.hpp> 
#include <boost/generator_iterator.hpp> 
#include <boost/random/mersenne_twister.hpp> 
#include <boost/random/normal_distribution.hpp> 

class FR { 

    private: 

    typedef boost::mt19937      ENG; // Mersenne Twister 
    typedef boost::normal_distribution<double> DIST; // Normal Distribution 
    typedef boost::variate_generator<ENG,DIST> GEN; // Variate generator 

    ENG eng; 
    DIST dist; 
    GEN gen; 

    public: 
     FR(); 
}; 

fr.c:

#include "fr.hpp" 

FR::FR() { 
    dist = DIST(0, 1); 
    gen = GEN(eng, dist); 
} 

不編譯:

$ g++ -O3 -ggdb3 -Wall -c fr.cpp 

fr.cpp: In constructor ‘FR::FR()’: 
fr.cpp:3: error: no matching function for call to ‘boost::random::variate_generator<boost::random::mersenne_twister_engine<unsigned int, 32ul, 624ul, 397ul, 31ul, 2567483615u, 11ul, 4294967295u, 7ul, 2636928640u, 15ul, 4022730752u, 18ul, 1812433253u>, boost::random::normal_distribution<double> >::variate_generator()’ 

+0

在我看來,你不需要雙冠王的boost :: normal_distribution 也許嘗試提振:: normal_distribution <> – madnut

回答