簡體   English   中英

具有共享指針的觀察者

[英]Observer with shared pointers

我正在嘗試編寫一個簡單的觀察器類,該類注冊並保存對象的共享指針。 下面是代碼:

template <typename Ptr>
class S
{
  private:
    std::map<string,std::vector<shared_ptr<Ptr>> observers_;
  public:

  S()=default;

  void registerObserver(const string &event, shared_ptr<Ptr> observer)
  {
    observers_[event].push_back(observer);
  }

  void notify(const string&event) 
  {
    for (const auto& obs : observers_.at(event)) 
      obs->notify();
  }

};

但是,這將導致編譯失敗,並顯示以下錯誤:

Subject.h:51:50: error: template argument 2 is invalid
   51 |     std::map<string,std::vector<shared_ptr<Ptr>> observers_;

有人可以幫忙糾正我的聲明嗎?

我正在嘗試編寫一個簡單的觀察器類,該類注冊並保存對象的共享指針。

然后,您要使用std::weak_ptr ,它是專門為此設計的:

std :: weak_ptr對臨時所有權建模:當僅當對象存在時才需要訪問該對象,並且該對象可能隨時被其他人刪除時,std :: weak_ptr用於跟蹤該對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM