以下觀察者類在其ctor執行時通過調用attach
向主題註冊回調函數。我希望觀察員的註銷者註銷回調函數。將shared_ptr傳遞給std :: function(成員函數)
我該如何將detach
的指針傳遞給attach
,以便主題可以將其從觀察者列表中刪除?
我想我要存儲shared_ptr
到this
,但我不知道我是如何從獲取到shared_ptr
的成員函數callback
。
任何人都可以幫忙嗎?
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);
爲什麼在ctor參數列表中不使用'const Subject&'是否有特殊原因?我問,因爲你明顯的複製 - 無論如何正在構建一個副本。 – Superlokkus
@Superlokkus因爲'Subject :: attach'不是'const'。 – ksl
那麼'm_subject'也是一個'Subject&'呢?否則,你正在創建你的主題的副本,然後它是無關緊要的。 – Superlokkus