C++ 如何为观察者模式使用信号和插槽?

C++ 如何为观察者模式使用信号和插槽?,c++,design-patterns,signals,observer-pattern,signals-slots,C++,Design Patterns,Signals,Observer Pattern,Signals Slots,我编写了一个简单的观察者模式,其中观察者具有“voidnotify(std::string)”函数,可观察对象对每个注册的观察者调用该函数,并使用标记化字符串传输数据。这是非常简单,容易和工程,但我需要向前迈进一步 我需要用信号和插槽实现它(例如使用boost::signals2)。然而,我不知道插槽和信号应该是什么样子,以及它们应该如何放置。我也不知道如何允许注册任何我想要的函数,而不仅仅是void(string) 我找不到任何使用此模式的信号和插槽的好资源。然而,每个人都说信号和插槽对于观察

我编写了一个简单的观察者模式,其中观察者具有“voidnotify(std::string)”函数,可观察对象对每个注册的观察者调用该函数,并使用标记化字符串传输数据。这是非常简单,容易和工程,但我需要向前迈进一步

我需要用信号和插槽实现它(例如使用boost::signals2)。然而,我不知道插槽和信号应该是什么样子,以及它们应该如何放置。我也不知道如何允许注册任何我想要的函数,而不仅仅是void(string)

我找不到任何使用此模式的信号和插槽的好资源。然而,每个人都说信号和插槽对于观察者模式来说是惊人的。你能告诉我观察员模式应该如何使用信号和插槽吗

我目前在没有信号的情况下实现如下:

class observable
{
public:
void register(observer *);
void unregister(observer *);
protected:
void notifyObservers()
   {
    for every registered observer
    observer.notify(std::string tokenized_string);
   }
}

class observer
{
public:
void notify(std::string) = 0;
}

我需要更改此模式以使用信号和插槽,但我不知道它应该如何有用、设计良好和灵活。

观察者模式如何工作

  • 观察对象被观察对象“观察”
  • 当一个可观察对象被修改时,它会通知其所有观察者一个已做出的更改,例如通过调用其“更新”或“通知”函数(或其他任何函数)
因此,在信号方面时隙方面。 基本原理是将信号连接到插槽,每次发出信号时都会调用插槽

您会发现,在Observer模式中使用它非常容易:只需在Observable中创建一个信号,该信号将连接到用于更新它的每个Observer的插槽

在可观察到的变化的情况下。不要循环浏览所有观察者的列表,并逐个调用他们的
update
方法,只需发出信号即可。相应的插槽将被神奇地调用

更进一步,你可以在可观察物上有一个槽,连接到观察者将发出的信号,告诉可观察物在发生变化时必须注意到它


由于我从未使用过
Boost::signals2
,因此无法为您提供一个完全有效的示例代码,但您应该看一看并开始使用:)

@Denis Ermolin我不知道如何使用此模式的信号和插槽(目前没有信号的实现是不够的)。这就是为什么我需要一些关于信号和插槽的指导。你读过了吗?@Johnsyweb是的。我只需要一点指导,因为我不完全理解如何在这种模式下实现信号以从中受益。