c+的消息接收+;演员制 我试图在C++中实现对消息的消息处理。下面的scala代码是我试图用c实现的++ def receive = { case Message1 =>{/* logic code */} case Message2 =>{/* logic code */} }

c+的消息接收+;演员制 我试图在C++中实现对消息的消息处理。下面的scala代码是我试图用c实现的++ def receive = { case Message1 =>{/* logic code */} case Message2 =>{/* logic code */} },c++,c++11,lambda,actor,messages,C++,C++11,Lambda,Actor,Messages,因此,我们的想法是为各种消息类型创建一组处理程序函数,并创建一个分派方法,将消息路由到相应的消息处理程序。所有消息都将扩展基本消息类型 解决此问题的最佳方法是什么: 维护一个映射(消息类型、函数指针),分派方法将检查映射并调用appropiate方法。但是,这种映射需要在Actor类中手动完成 我读了这篇文章,lbrary正按照我想要的方式处理消息,但我无法理解他们是如何在第56行创建的lambda函数上进行模式匹配的 如果有任何建议或阅读链接能让我更接近这个问题的解决方案,我将不胜感激。既然您

因此,我们的想法是为各种消息类型创建一组处理程序函数,并创建一个分派方法,将消息路由到相应的消息处理程序。所有消息都将扩展基本消息类型

解决此问题的最佳方法是什么:

  • 维护一个映射(消息类型、函数指针),分派方法将检查映射并调用appropiate方法。但是,这种映射需要在Actor类中手动完成

  • 我读了这篇文章,lbrary正按照我想要的方式处理消息,但我无法理解他们是如何在第56行创建的lambda函数上进行模式匹配的


  • 如果有任何建议或阅读链接能让我更接近这个问题的解决方案,我将不胜感激。

    既然您已经提到了CAF:为什么您要实现自己的actor库而不是使用CAF?如果您将编写lib作为练习,我建议您开始阅读
    libcaf\u core/caf/match\u case.hpp
    libcaf\u core/caf/on.hpp
    libcaf\u core/caf/detail/try\u match.hpp
    。这是CAF模式匹配功能的“核心”。请注意,您将看到大量元编程代码。代码是由C++专家阅读的。这绝对不是一个学习技术的好地方

    不过,我可以概述一下发生了什么

    • CAF在
      detail::behavior\u impl
      • 你永远不会得到一个指向任何一个用户的指针
      • message\u handler
        behavior
        存储指向
        behavior\u impl的指针
    • 匹配案例可以以不同方式生成:
      • 直接来自回调/lambdas(普通情况)
      • 使用全面覆盖规则(通过
        其他>>…
      • 使用(…)>>…符号上的高级
    • CAF只能与存储在
      message
      对象中的元组匹配
      • “模拟”(反射的子集)
      • 需要值和元信息(即类型信息)
    • 对于匹配本身,CAF只需迭代
      match\u case
      对象列表
      • 尝试将输入与每个案例匹配
      • 在第一次匹配时停止(就像函数式语言实现的那样)
    我们在模式匹配实现中投入了大量精力,以在用户端获得一个高级别、干净的界面。但这并不容易。因此,如果您将此作为练习,请注意您需要大量元编程经验才能理解代码


    如果您不将此作为练习,我会很感兴趣,为什么您认为CAF没有涵盖您的用例,也许我们可以说服您参与其开发,而不是从头开始开发其他东西

    尝试使用(包括电池)或(仍然是实验性的,但相当轻量级的演员式解决方案)。

    如果您看到的是像#1这样的解决方案,您刚才描述了虚拟表。除非你想使用像你展示给我们的那个图书馆那样性感和难以辨认的东西,为什么不注册听众来处理你的信息呢?您将拥有映射和函数指针。