mam klasy C++ z dwóch elementów danych, na przykładC++ const zainicjowania wielu elementów danych z jedną funkcję inicjatora
class mytest() {
public:
mytest():
a_(initA()),
b_(initB())
{};
virtual ~mytest() {};
private:
double initA() {
// some complex computation
}
double initB() {
// some other complex computation
}
private:
const double a_;
const double b_;
}
Niestety jednak initA
i initB
nie może być oddzielony jak naszkicowane powyżej. Zarówno a_
i b_
może być inicjowane przez jeden duży złożonych obliczeń, gdy wartość b_
zależy wynik pośredni do obliczenia a_
, np
void mytest::init() const {
const double a = 1.0 + 1.0; // some complex computation
const double b = 2*(a + 1.0); // another complex computation
a = 2 * a; // even more complex, wow
// Now, a and b contain the data from which a_ and b_ should be initialized.
}
ja chce zachować a_
i b_
oddzielne (i const
) zmiennych (i nie umieszczaj ich w std::tuple
lub podobnych). Jednak nie wiem, czy możliwe jest zainicjowanie a_
i b_
niezależnie od pojedynczej funkcji.
Jakieś wskazówki?
dobrze najpierw trzeba initilize te const członków w liście inicjatora w konstruktorze, a nie w jakiś funkcja członkowska – Guiroux
'a_' i' b_' powinny być inicjowane przez konstruktor: 'mytest(): a_ (valueA), b_ (valueB) {}' gdzie 'valueX' może być wartością bezpośrednią, parametrem z konstruktora lub funkcja zwracająca obliczoną wartość. Również posiadanie funkcji o nazwie 'init' jest dziwne: podczas tworzenia obiektu wywoływany jest konstruktor, a po inicjalizacji tego obiektu. To tak jakby mieć funkcję o nazwie 'deinit', która powinna być wywołana przed destruktorem ... bez sensu – Garf365
Po prostu zainicjuj je na liście inicjalizacji. Jeśli nie możesz, pokaż jakiś odpowiedni kod. – juanchopanza