gpt4 book ai didi

c++应用程序保存并应用首选项模式(可能是 boost 或其他)

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:09 25 4
gpt4 key购买 nike

典型情况:您有一个应用程序,用于保存和加载首选项(保存和加载由 Config 类处理)。

想象一下,对某些 GUI 元素的字体有这样的偏好。

所以我们有

struct Font;
struct Config {
const Font& getFontForSpecificGUIElement() const;

//save to disk if Font changed

void setFontForSpecificGUIElement(Font);
};

每当更改字体时,我都需要将更改通知 SpecificGUIElement 类的所有实例。

如何实现这样的通知功能?

为了保持 Config 简单,我想解耦该功能。此外,还有很多这样的属性(其中 30-50 个)。

所以总的来说我想要:

  1. 不需要实现虚拟接口(interface)

  2. 我不需要线程安全

  3. 事件处理器的便捷注册

  4. 我需要通知新订阅的接收者,以及最近的如果有任何通知(我的意思是,在我的示例中 Font 已更改,并且当新的 GUI 元素订阅此类事件时,它们会收到,事件会自动为它们触发,并且它们会收到 的最后一个变体字体)

  5. 事件类型的方便注册(我的意思是在上面的项目中我们创建了某种值缓存,所以添加新的应该很简单)

我想这是很常见的要求,所以可能已经有解决方案了,在流行的 C++ 库中,例如 boost?

更新:为什么Qt不适合我。我看到两种方法使用 Qt,QEvent 子系统。但因为这是不可能的向未知的听众发送事件是不行的。为什么不是signal/slots,首先你需要继承QObject,其次要实现(4),我必须创建MessageBus类来缓存最后的值,并且添加新事件开始需要做很多工作:

添加数据字段,添加新信号,添加函数(X)以发出新信号,因为信号实际上是 protected 函数,加上 (X),我需要将上一个值与新值进行比较。

最佳答案

是的,这已经存在于例如:

boost 信号2

有许多示例可以帮助您继续前进。

Signals2 确实提供了线程安全,但我想这并没有什么坏处。

或者,

Qt

Qt 确实有信号/槽实现,许多其他 UI 框架也是如此:

关于c++应用程序保存并应用首选项模式(可能是 boost 或其他),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33620228/

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