2017-03-17 72 views
1

我有一個對象集合,可以說QVector<ApplicationStates>,它記錄了在我的軟件中完成的最重要的操作。基本上,這個對象是用來處理重做/撤銷操作的。這個應用程序使用很多委託對象來構建。必須註冊的操作在很多這些對象中。因此,我總是通過我的對象的集合,每個代表的形式下:對象傳播

class AWidget : public QWidget{ 
    AWidget(QVector<ApplicationStates>* states, QWidget* parent = nullptr); 
    ... 

看來醜陋給我。我想兩種解決方案:

  • Singleton;
  • 只需聲明QVector爲靜態全局變量(我讀過全局變量是邪惡的)。

有人有建議嗎? 感謝您的回答。

+1

'QVector Peter

+0

@peter只有一個例子 – Papipone

+0

單身人士與全局人有大部分相同的問題。 – aschepler

回答

2

我經常遇到類似的情況,我發現只是簡單地將你的向量包裝成類似於「ApplicationContext」的類,然後將共享指針或引用傳遞給周圍的實例以節省時間。它有很多好處:

  • 您避免全球/單,你可以自由地事實上在未來
  • 同時有多個實例如果你突然比剛纔那個對象的矢量更多,你需要只需擴展您的上下文類以添加任何您需要的東西
  • 如果您的矢量突然變成地圖或以其他方式進行更改,則無需更改任何通過它的接口(如信號/插槽)。 (當然,您需要更改使用向量的實現)。
  • 獎勵:代碼變得易於測試!你現在可以爲這個類做測試用例。

這可能不是所有情況下的最佳解決方案,但我認爲它在這種情況下非常接近!