C++ c++;应用程序保存和应用首选项模式(可能是boost或其他类型)

C++ c++;应用程序保存和应用首选项模式(可能是boost或其他类型),c++,c++11,boost,C++,C++11,Boost,典型情况:您有一个应用程序,用于保存和加载首选项 (保存和加载由类Config处理) 想象一下,对某些GUI元素的字体有这样的偏好 所以我们有 struct Font; struct Config { const Font& getFontForSpecificGUIElement() const; //save to disk if Font changed void setFontForSpecificGUIElement(Font); }; 无论何时更

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

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

所以我们有

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

    //save to disk if Font changed

    void setFontForSpecificGUIElement(Font);
};
无论何时更改字体,我都需要将该更改通知class
SpecificGUIElement
的所有实例

如何实现这种通知功能

为了保持
Config
简单,我想将该功能解耦。此外,还会有很多这样的房产(30-50个)

因此,总的来说,我希望:

  • 不需要实现虚拟接口

  • 我不需要线程安全

  • 方便地注册事件处理程序

  • 我需要通知新订阅的接收者,最近 通知(我的意思是,如我的示例中所示,更改了
    Font
    ,当新的GUI元素订阅此类事件时,它们将接收事件,并自动为它们触发事件,它们将接收
    Font
    的最后一个变体)

  • 方便注册活动类型(我指的是上述项目 我们创建了某种类型的值缓存,因此应该很简单(添加新缓存)

  • 我想这是很常见的要求,所以可能已经有了解决方案, 在流行的C++库中,像Booost? 更新: 为什么Qt不适合我。我看到两种方法 使用Qt,
    QEvent
    子系统。但因为这是不可能的 将事件发送到未知的侦听器这是不可能的。为什么不发信号/插槽,首先需要继承
    QObject
    ,其次要实现(4),我必须创建
    MessageBus
    类来缓存最后的值,添加新事件开始需要做很多工作:

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

    是的,此alsready存在于例如:

    增压信号2
    有很多样品可以让你去

    Signals2确实提供了线程安全性,但我想这并不有害

    或者

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


    是的,此alsready存在于例如:

    增压信号2
    有很多样品可以让你去

    Signals2确实提供了线程安全性,但我想这并不有害

    或者

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


    我更新我的问题,说明为什么Qt不适合我的情况。我看不出如何在boost signals2中实现(4)[缓存上次更改的值+3个简单的附加新事件],请描述一下?
    (4)[缓存上次更改的值+3个简单的附加新事件]
    读作
    (4)[缓存上次更改的值+(5)同时添加简单的新事件]
    我在boost signals2的基础上实现了所需的功能,详细信息如下:我更新了我的问题,说明为什么Qt不适合我的情况。我看不出如何在boost signals2中实现(4)[缓存上次更改的值+3个简单的附加新事件],请描述一下?
    (4)[缓存上次更改的值+3个简单的附加新事件]
    读作
    (4)[缓存上次更改的值+(5)同时添加简单的新事件]
    我在boost signals2的基础上实现了所需的功能,详情如下: