gpt4 book ai didi

c++ - 对象传播

转载 作者:行者123 更新时间:2023-11-30 03:33:27 25 4
gpt4 key购买 nike

我有一个对象集合,比方说 QVector<ApplicationStates> ,它记录了我的软件中完成的最重要的操作。基本上,此对象旨在处理重做/撤消操作。该应用程序是使用大量委托(delegate)对象构建的。必须注册的操作存在于许多这些对象中。因此,我总是在每个委托(delegate)中以以下形式传递我的对象集合:

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

我觉得很丑。我想到了两种解决方案:

  • 单例;
  • 只需声明 QVector作为静态全局变量(我读到全局变量是邪恶的)。

有人有什么建议吗?感谢您的回答。

最佳答案

我时常遇到类似的情况,我发现只需将您的 vector 包装在一个名为“ApplicationContext”之类的类中,然后传递一个共享指针或对其实例的引用就可以节省时间。它有很多好处:

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

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

关于c++ - 对象传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42867350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com