Ik ben in de boost::random library gedoken en vind het erg mooi spul. Nu wil ik voor mijzelf altijd de Mersenne twister (mt19937) gebruiken (dezelfde die MATLAB gebruikt) en dus wil ik een extra wrapper om boost::variate_generator heen leggen.
Hier een begin, ik ben er nog niet mee klaar, maar ik ben er al wel mee ontevreden.
Ik zou graag van het type-specifying gedeelte in mijn instantiation afwillen (sorry voor waarschijnlijk verkeerd woordgebruik) omdat het dubbelop is. Is mogelijk dit op de een of andere manier te wrappen ofzo? Ik heb heel wat geprobeerd, maar heb niets legaals kunnen vinden.
Zie code:
Hier een begin, ik ben er nog niet mee klaar, maar ik ben er al wel mee ontevreden.
Ik zou graag van het type-specifying gedeelte in mijn instantiation afwillen (sorry voor waarschijnlijk verkeerd woordgebruik) omdat het dubbelop is. Is mogelijk dit op de een of andere manier te wrappen ofzo? Ik heb heel wat geprobeerd, maar heb niets legaals kunnen vinden.
Zie code:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| // includes #include <boost/random.hpp> #include <time.h> template<class Dist> class CRandom { public: explicit CRandom(Dist d); ~CRandom(void) {}; typedef typename Dist::result_type result_type; result_type operator()() { return Gen(); } template<class T> result_type operator()(T value) { return Gen(value); } private: boost::mt19937 Eng; boost::variate_generator<boost::mt19937,Dist> Gen; }; template<class Dist> CRandom<Dist>::CRandom(Dist d) : Eng(unsigned int(time(NULL))), Gen(Eng,d) { } //main int main(int argc, char* argv[]) { // ipv onderstaande CRandom<boost::uniform_int<>> Cr(boost::uniform_int<>(-2, 4)); // zou ik graag dit willen kunnen doen, twee keer boost::uniform_int<> is dubbelop CRandom Cr(boost::uniform_int<>(-2, 4)); // of misschien wel: CRandom<boost::uniform_int<>> Cr(-2, 4); // ofzo int a = Cr(); // exit return 1; } |