Hi - apologies if this is a bit vague but I am trying to understand the consequences of some base class design choices in my game engine. Below are 2 simplified Process classes that are designed to be used as Base Classes. It seems to me on the face of it Process1 is a better design choice as it demands way less of clients' derived classes - eg, having to remember to invoke Process1::VPause() - although I guess there is a loss of flexibility... In Derived2 for example the client could choose not to pause the process if some condition is met.
Insight/Advice appreciated - is there a better way? I really hate the routine requirement to invoke the base class VPause()... it seems to be asking for trouble.
[source lang="cpp"]
class Process1
{
public:
virtual ~Process1();
bool GetPaused() const {return m_bPaused;}
void SetPause(bool b) {if (b!=GetPaused()) {m_bPaused = b; VPause(b);}}
protected:
virtual void VPause(bool b) { }
private:
bool m_bPaused;
};
class Derived1 : public Process1
{
//...
void VPause(bool b) override { /* do something - no need to worry about m_bPaused, invoking Process1::VPause() etc*/}
};
// --------------------------------------------------------------------------------
class Process2
{
public:
virtual ~Process2();
bool GetPaused() const {return m_bPaused;}
virtual void VPause(bool b) {m_bPaused = b;}
private:
bool m_bPaused;
};
class Derived2 : public Process2
{
//...
void VPause(bool b) override {
if (b!=GetPaused()) {
//...
}
Process2::VPause(b);}
};
[/source]