C++ 如何为观察者模式使用信号和插槽?
我编写了一个简单的观察者模式,其中观察者具有“voidnotify(std::string)”函数,可观察对象对每个注册的观察者调用该函数,并使用标记化字符串传输数据。这是非常简单,容易和工程,但我需要向前迈进一步 我需要用信号和插槽实现它(例如使用boost::signals2)。然而,我不知道插槽和信号应该是什么样子,以及它们应该如何放置。我也不知道如何允许注册任何我想要的函数,而不仅仅是void(string) 我找不到任何使用此模式的信号和插槽的好资源。然而,每个人都说信号和插槽对于观察者模式来说是惊人的。你能告诉我观察员模式应该如何使用信号和插槽吗 我目前在没有信号的情况下实现如下:C++ 如何为观察者模式使用信号和插槽?,c++,design-patterns,signals,observer-pattern,signals-slots,C++,Design Patterns,Signals,Observer Pattern,Signals Slots,我编写了一个简单的观察者模式,其中观察者具有“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;
}
我需要更改此模式以使用信号和插槽,但我不知道它应该如何有用、设计良好和灵活。观察者模式如何工作
- 观察对象被观察对象“观察”
- 当一个可观察对象被修改时,它会通知其所有观察者一个已做出的更改,例如通过调用其“更新”或“通知”函数(或其他任何函数)
update
方法,只需发出信号即可。相应的插槽将被神奇地调用
更进一步,你可以在可观察物上有一个槽,连接到观察者将发出的信号,告诉可观察物在发生变化时必须注意到它
由于我从未使用过
Boost::signals2
,因此无法为您提供一个完全有效的示例代码,但您应该看一看并开始使用:)@Denis Ermolin我不知道如何使用此模式的信号和插槽(目前没有信号的实现是不够的)。这就是为什么我需要一些关于信号和插槽的指导。你读过了吗?@Johnsyweb是的。我只需要一点指导,因为我不完全理解如何在这种模式下实现信号以从中受益。