Rozbudowany konstruktor

0

Najpierw dla kontekstu, trochę kodu:

// choose_base.h

using namespace boost;

class Movement
{
public:
    Movement( set<int>& proxies, int num );

    void initSetting( int ini );
    void sortByTimeAndPrint( WriteGroupingSchedule& out );

protected:
    int       _num;
    set<int>& _proxies;

    kreutzer1986                         _rng;
    lognormal_distribution<kreutzer1986> _lognormal;

    /** Uniform distribution between 0 and num-1 */
    uniform_int<kreutzer1986>            _uni;

    /* Uniform distribution between 0 and 1 */
    uniform_01<kreutzer1986>             _uni01;

    typedef pair<double,int> 		 Pair;
    vector<vector<Pair> >                _in_group;
};
 
// choose_base.cc 

#include "choose_base.h"

using namespace boost;

Movement::Movement( set<int>& proxies, int num )
    : _num( num )
    , _proxies( proxies )
    , _rng()
    , _lognormal( _rng, 1.0, 0.5 )
    , _uni( _rng, 0, _num-1 )
    , _uni01( _rng )
{
    _rng.seed( ::time(NULL) );
}

Co to za ciekawa budowa konstruktora...? Jeżeli np. _uni01 jest polem typu uniform_01<kreutzer1986>, to co oznacza _uni01(_rng)?

Niestety taki kod daje błąd "no matching function for call to ..." dla wszystkich trzech pól (_lognormal, _uni, _uni01). Próbuję poprawić ten kod, ale nie wiem co w tym miejscu programista miał na myśli... Czy chciał mieć 3 pola (int, double, double), które miałyby przypisane liczby wygenerowane przez te 3 kolejne funkcje losowe? Czy jeżeli przeniosę tą inicjalizację do konstruktora, dodam gettery i settery, to będzie to...?

2

Czy chciał mieć 3 pola (int, double, double), które miałyby przypisane liczby wygenerowane przez te 3 kolejne funkcje losowe? Czy jeżeli przeniosę tą inicjalizację do konstruktora, dodam gettery i settery, to będzie to...?

He?

Co to za ciekawa budowa konstruktora...?

W sensie jak ciekawa? To normalna lista inicjalizacyjna konstruktora.

Jeżeli np. _uni01 jest polem typu uniform_01<kreutzer1986>, to co oznacza _uni01(_rng)?

Wywołanie konstruktora pola _uni01 typu uniform_01<kreutzer1986> z argumentem _rng.

Niestety taki kod daje błąd "no matching function for call to ..."

Szybkie zerknięcie w dokumentację boosta dla pierwszego z tych typów mówi, że nie istnieje konstruktor z trzema parametrami.
http://www.boost.org/doc/libs/1_54_0/doc/html/boost/random/lognormal_distribution.html

Może jakaś poprzednia wersja boosta?

1 użytkowników online, w tym zalogowanych: 0, gości: 1