I'm developing a GUI library in C++. I have a class named Sidebar that draws the sidebar. Also, I have an interface SidebarElement that provides an interface to draw something sidebar element. I have a class SidebarTab that implements the SidebarElement interface, this class draws a clickable button. When the button is pressed sidebar element have to somehow notify the Sidebar class about changing the tab. I can pass the Sidebar instance to SidebarElement and call the Sidebar's method notify from SidebarElement, but it is the double reference problem. As far as I know, it's a bad practice. Example code: SidebarElement interface:
class SidebarElement {
public:
virtual ~SidebarElement() {}
virtual void SetSidebar(Sidebar* sidebar) = 0;
virtual void Draw(const SidebarElementDrawParams& params) = 0;
virtual float GetHeight() = 0;
};
Sidebar class:
class Sidebar {
public:
void AddElement(SidebarElement* element);
void Draw();
// Method for call from SidebarElement derivatives
void NotifyChangeTab(int tab_id);
};
Aucun commentaire:
Enregistrer un commentaire