对象传播

时间:2017-03-17 21:25:48

标签: c++ c++11 qt5

我有一组对象,比如QVector<ApplicationStates>,它记录了我软件中最重要的操作。基本上,此对象用于处理重做/撤消操作。应用程序是使用许多委托对象构建的。必须注册的操作存在于很多这些对象中。因此,我总是在表格中的每个代表中传递我的对象集合:

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

对我来说似乎很难看。我想到两个解决方案:

  • 辛格尔顿;
  • 简单地将QVector声明为静态全局变量(我读到全局变量是邪恶的)。

有人有建议吗? 谢谢你的回答。

1 个答案:

答案 0 :(得分:2)

我不时遇到类似的情况,我发现只需将你的矢量包装在类似于&#34; ApplicationContext&#34;的类中。然后将共享指针或引用传递给周围的实例,以节省时间。它有很多好处:

  • 你避免使用全局/单例,并且你可以自由地在将来同时拥有多个实例
  • 如果您突然不仅仅需要传递arround的对象向量,只需扩展您的上下文类以添加您需要的任何内容
  • 如果您的矢量突然变成地图或以其他方式发生变化,则无需更改任何传递它的接口,例如信号/插槽。 (当然,您需要更改使用向量的实现。)
  • 奖励:代码变得容易测试!您现在可以为此类创建测试用例。

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