观察者带有共同指针

Observer with shared pointers

本文关键字:指针 观察者      更新时间:2023-10-16

我正在尝试编写一个简单的观察者类,该类别注册并保留对象的共享指针。以下是代码:

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 :: feek_ptr模型临时所有权:仅当对象存在时才能访问该对象,并且可以随时将其删除。