在我的小型GUI庫中,不同的東西會導致Widget
變得不可見。優雅的方式來避免多個布爾值?
- 窗口可能會摺疊。所有的孩子都必須遞歸地隱形。
- 用戶可以手動隱藏小部件。
- 小部件可能會被「排除」。考慮一個「快門」列表框:快門及其內容僅在按下列表框按鈕時纔會顯示。
這是我目前的解決方案:
class Widget {
// ...
bool collapsed;
bool hidden;
bool excluded;
public:
bool isVisible() { return !collapsed && !hidden && !excluded; }
void hide() { hidden = true; }
void show() { hidden = false; }
// ...
};
我不喜歡三個布爾值用於表示同樣的事的事實。
我想過使用int
:
class Widget {
int hiddenLevel{0};
bool isVisible() { return hiddenLevel == 0; }
void hide() { ++hiddenLevel; }
void show() { --hiddenLevel; }
};
但用戶可能會意外地調用hide()
兩次。
有沒有一種優雅的方式來避免重複變量,基本上做同樣的事情?我不在乎這個插件是collapsed
,hidden
還是excluded
,我只想知道它是否可見,並且還原摺疊它,隱藏它或排除它的效果。
他們有什麼區別? –
你可能會考慮檢查直接父母。 –
這看起來像它可以被建模爲一個狀態機。 – juanchopanza