以下观察者类通过调用
如何传递与
我想我必须存储一个指向
有谁可以帮忙吗?
attach
将回调函数与主题注册,当其构造函数执行时。我希望观察者的析构函数可以取消注册回调函数。如何传递与
attach
相同的指针给detach
,以便主题可以将其从其观察者列表中删除?我想我必须存储一个指向
this
的shared_ptr
,但我不确定如何从中获取到成员函数callback
的shared_ptr
。有谁可以帮忙吗?
Observer::Observer(Subject& subject) : m_subject(subject),
{
m_subject.attach("cmd", std::make_shared<std::function<void()>>(std::bind(&Observer::callback, this)));
}
Observer::~Observer()
{
// I tried this initially but realised that the pointer below
// is different to the one passed to `attach` from the ctor.
m_subject.detach("cmd", std::make_shared<std::function<void()>>(std::bind(&Observer::callback, this)));
}
void Observer::callback()
{
// do some stuff
}
attach
和detach
的声明如下:
void Subject::attach(const std::string& command, const std::shared_ptr<std::function<void()>>& callback);
void Subject::detach(const std::string& command, const std::shared_ptr<std::function<void()>>& callback);
const Subject&
?因为你显然还是要复制一份的。 - SuperlokkusSubject::attach
不是const
。 - kslm_subject
也是一个Subject &
吗?否则你会创建主题的副本,然后它就无关紧要了。 - Superlokkusm_subject
是一个Subject&
。 - ksl