C++ 静态观察器 class

c++ static observer class

我有两个程序:服务器和客户端

class client
{
 private:
  Network    net;
  Gui        gui;
};

这是网络 class

class Network
{
  public:
   void      receivePacket(packet)
   {
     Protocol::readPacket(packet)
   }
};

这里是桂class

class Gui
{
 private:
  std::string   informations;

 public:
  void          displayInfo();
  void          updateInformation(information);
};

这是协议

class Protocol
{
     static void     readPacket(packet)
     {
       if (packet.command == "refreshGui")
         //I need somehow to call GUI::UpdateInformation here and give the information from packet.information
     }
};

协议被视为 "static class",这意味着不应实例化 in。所以这个想法是,当 Protocol::readPacket 从服务器得到一个 packet 时,它应该能够将信息发送到 GUI。但是,情况并非总是如此,因此传递 point/reference 并不是我想要的。

它没有很好地说明,但想法是: - Protocol::readPacket 寻求我们是否需要调用 GUI - 协议不应该接受另一个参数,也不应该被实例化。

有人给了我关于使用观察者模式的建议。 Protocol 是主题,GUI 是观察者。但是,如果没有实例化协议,我无法做到。

那么有没有不实例化协议的方法呢?

在分布式计算中,节点的网络管理器接收消息并调用与消息类型关联的调度程序是一种常见模式。您的需求非常相似。以下是您可以执行的操作:

  • 在您的网络 class 中,维护 unordered_map< packet_type、std::function >。
  • 当您的程序启动时,将 unordered_map 推入 std::pair<"refreshGui"、Gui::UpdateInformation>
  • 在 Network::receivePacket 中,从 unordered_map 中检索函数并调用它。