2016-04-28 9 views
0

Ich habe eine ziemlich große/beteiligte Klasse C (ziemlich schwierig zu refactor, wie niemand seit 15 Jahren jemals versucht hat, so dass die Dinge bis zu den Sparren angehäuft haben (plus schlechtes Design), das eine int Mitgliedsvariable enthält, sagen wir mal m_Toto. Wann immer Sie ein Objekt von C instanziieren, passieren Sie eine init() Mitgliedsfunktion, die eine Menge Dinge setzt, darunter setzt sie m_Toto auf 0. Nachdem einige Datenelemente festgelegt und verwendet wurden, kann on den Wert berechnen, den m_Toto haben wird. Dieser Wert wird für alles andere, was die Klasse tut, von zentraler Bedeutung sein.Aktualisiert, dass eine Membervariable gesetzt wurde/hat sich geändert

Nun setzt schlechte Namensgebung beiseite, m_Toto wird zum ersten Mal durch den Aufruf der int C::GetToto(), berechnet, die diese Struktur hat:

int C::GetToto() 
{ 
    if (m_Toto != 0) 
     return m_Toto ; 
    // else 
    // we calculate m_Toto thx to a lot of data etc 
} 

Immer, wenn wir m_Toto ‚s-Wert müssen wir GetToto() nennen, die überprüft, dass m_Toto initialisiert ist (dh ist nicht Null) und gibt zurück, die "echte" Berechnung wird nur beim ersten Mal durchgeführt.

Mein Problem ist das folgende. Ich habe einen Zustand von , der durch eine bool Mitgliedsvariable m_IsBlah definiert ist, und thx zu dem Wert von m_Toto bestimmt werden sollte.

Wie könnte ich tun, um sicher zu sein, in einer eleganten Art und Weise, um sicherzustellen, dass m_IsBlah wird nur das erste Mal berechnet werden m_Toto berechnet wird, und nur dann, ohne die oben genannte Art zu hässlich if ‚s zurückgreifen? Oder ist es zu viel Overkill?

Antwort

0

Wie immer in C++, verwenden Sie class es, um Abstraktionen zu erfassen. Habe die Klasse als Mitglied von C in ihrem Konstruktor konstruiert und meldet ob und wann IsBlah gesetzt ist und wenn ja zu was.