Use composition instead of inheritance to achieve virtualization.
e.g.
class SettingsHandlerBase {
public:
virtual ~SettingsHandlerBase() {}
virtual void saveSettings() = 0;
virtual void loadSettings() = 0;
};
template<class T> SettingsHandler {
public:
SettingsHandler(T *object) : m_object(object) {}
void saveSettings() { m_object->saveSettings(); }
void loadSettings() { m_object->loadSettings(); }
};
class X : public SettingsHandler<X> {
public:
X(...) : SettingsHandler<X>(this) {}
void saveSettings() { /* do your stuff */ };
void loadSettings() { /* do your stuff */ };
};
class SettingsHandlerBase {
public:
virtual ~SettingsHandlerBase() {}
virtual void saveSettings() = 0;
virtual void loadSettings() = 0;
};
template<class T> SettingsHandler {
public:
SettingsHandler(T *object) : m_object(object) {}
void saveSettings() { m_object->saveSettings(); }
void loadSettings() { m_object->loadSettings(); }
};
class X : public SettingsHandler<X> {
public:
X(...) : SettingsHandler<X>(this) {}
void saveSettings() { /* do your stuff */ };
void loadSettings() { /* do your stuff */ };
};
To copy to clipboard, switch view to plain text mode
or
class SettingsSubject;
class SettingsHandler {
public:
virtual ~SettingsHandler() {}
virtual void saveSettings(SettingsSubject *) = 0;
virtual void loadSettings(SettingsSubject *) = 0;
};
class SettingsSubject {
public:
SettingsSubject(SettingsHandler *h) {
m_settingsHandler = h;
m_settingsHandler->loadSettings(this);
}
~SettingsSubject() { m_settingsHandler->saveSettings(this); delete m_settingsHandler; }
};
class Something : public SettingsSubject {
public:
Something() : SettingsSubject(new SomethingSettingsHandler) {}
};
class SettingsSubject;
class SettingsHandler {
public:
virtual ~SettingsHandler() {}
virtual void saveSettings(SettingsSubject *) = 0;
virtual void loadSettings(SettingsSubject *) = 0;
};
class SettingsSubject {
public:
SettingsSubject(SettingsHandler *h) {
m_settingsHandler = h;
m_settingsHandler->loadSettings(this);
}
~SettingsSubject() { m_settingsHandler->saveSettings(this); delete m_settingsHandler; }
};
class Something : public SettingsSubject {
public:
Something() : SettingsSubject(new SomethingSettingsHandler) {}
};
To copy to clipboard, switch view to plain text mode
or something in a similar fashion.
Bookmarks