2017-03-17 80 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”的类,然后将共享指针或引用传递给周围的实例以节省时间。它有很多好处:

  • 您避免全球/单,你可以自由地事实上在未来
  • 同时有多个实例如果你突然比刚才那个对象的矢量更多,你需要只需扩展您的上下文类以添加任何您需要的东西
  • 如果您的矢量突然变成地图或以其他方式进行更改,则无需更改任何通过它的接口(如信号/插槽)。 (当然,您需要更改使用向量的实现)。
  • 奖励:代码变得易于测试!你现在可以为这个类做测试用例。

这可能不是所有情况下的最佳解决方案,但我认为它在这种情况下非常接近!