2013-07-17 4 views
1

http://www.sitmo.com/article/generating-random-numbers-in-c-with-boost/을 기반으로 부스트 난수 생성기에 대한 래퍼 클래스를 만들려고합니다. 문제는 boost가 템플릿을 사용하고 있으며 GEN gen이라는 선언을 인스턴스화에서 분리하는 방법을 모르겠다. DIST distdist = DIST(0, 1)으로 분리하는 것과 같이 할 수있다. 어떤 조언도 감사합니다.부스트 난수 생성기를 클래스 변수로 통합

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

나에게 보인다는><향상에 이중이 필요합니다 :: normal_distribution 어쩌면 부스트 : normal_distribution를 시도하지 말아 – madnut

답변

1

boost::variate_generatordefault constructor이 없습니다 당신이 당신의 생성자의 initialization list 사용할 필요가 있으므로, :

FR::FR() 
: dist(0,1), gen(eng,dist) 
{}