Class-based actors
A class-based actor is a subtype of event_based_actor and must implement the pure virtual member function make_behavior returning the initial behavior.

原话告诉我们两点:1.必须继承“ event_based_actor”。

2.重载make_behavior的函数,其实就是这个类的构造函数,定义了这个初始行为。

关于第一点呢,说明这个类可以使用很多基本的send,看了一点点源码发现event_based_actor间接继承了一个叫 localactor 的类,关于这个以类为基础构造的actor的用法可以去里面找,还是很方便的。

关于第二点,比较简单,就是要注意,以函数来构造的actor,会传入参数,但是这个main_behavior是不用参数的。

第二点带来的问题,就是函数构造的actor发送给自己消息只需要self来只待自己,如

  

self ->send(self,"hello");

现在不行了,自己就想到一种办法就是在类内声明一个scoped_actor,发送给this指针(在本地发送应该是用指针的)。

#include <string>
#include <iostream>
#include "caf/io/all.hpp"
#include "caf/all.hpp"
using namespace std;
using namespace caf; class SlaveNodeActor : public event_based_actor {
public:
behavior make_behavior() override {
scoped_actor a;
a
->send(this,"hello");
return {
[=](const string& str ) {
cout << str << endl;
quit();
},
caf::others >> [=]() {
cout << "unkown message" << endl;
}
};
}
}; int main(){
auto slave_actor = caf::spawn<SlaveNodeActor>();
caf::await_all_actors_done();
return ;
}

然后,最近写代码发现这样一种用法,就是类A存放这actor的信息如IP,端口号,以及这个actor本身的信息,作为一个人就需要姓名,而类B继承了event_based_actor,作为类A的友元类去调用A的信息,B的构造函数需要传入一个类A的指针即可,A负责对外提供接口控制actor的行为。

贴个图片

为了方便控制,类A(SlaveNode 最好好把actor作为自己的成员变量,不然使用的时候会不方便,用了就知道,你懂得。)

之后又试了一下,其实可以把上面生成scoped_actor 去掉,

直接用

这样也是可以的,功能都是一样的。(之前有些粗糙误导了)

最后弱弱的说一句,求互粉阿!

CAF(C++ actor framework)使用随笔(使用类去构建actor和使用的一些思路)的更多相关文章

  1. CAF(C++ actor framework)使用随笔(send sync_send)(二)

    a). 发完就忘, 就像上面anon_send 以及send #include <iostream> #include "caf/all.hpp" #include & ...

  2. 在 .NET Framework 中使用 StringBuilder 类

    在 .NET Framework 中使用 StringBuilder 类 String 对象是不可变的.每次使用 System.String 类中的一个方法时,都要在内存中创建一个新的字符串对象,这就 ...

  3. EF(Entity Framework)通用DBHelper通用类,增删改查以及列表

    其中 通用类名:DBhelper 实体类:UserInfo 1 //新增 2 DBHelper<UserInfo> dbhelper = new DBHelper<UserInfo& ...

  4. 【外文翻译】使用Timer类去调度任务 ——java

    使用Timer类去调度任务 --java 原文地址:https://dzone.com/articles/using-timer-class-to-schedule-tasks 原文作者:Jay Sr ...

  5. 从零开始开发一个简易的类vue-cli构建工具

    代码地址:https://github.com/cheer4chai/webpack-learning 仿照vue-cli开发这个工具的目的是了解webpack的基本设置,以及vue-cli的工作原理 ...

  6. 【mybatis】idea中 mybatis的mapper类去找对应的mapper.xml中的方法,使用插件mybatis-plugin

    idea中 mybatis的mapper类去找对应的mapper.xml中的方法,使用插件mybatis-plugin,名字可能叫Free mybatis-plugin 安装上之后,可能需要重启ide ...

  7. java关于类的构建

    一开始老是把类的构建和代码的重构搞的混淆,现在理解的可能还好点(至少概念上不会出错了),简单的说类就是一个复杂的变量,这个变量里面含有属性.方法和构造方法,注意方法和构造方法是完全不同的两个概念,而且 ...

  8. 深入解析Windows窗口创建和消息分发(三个核心问题:怎么将不同的窗口过程勾到一起,将不同的hwnd消息分发给对应的CWnd类去处理,CWnd如何简单有效的去处理消息,由浅入深,非常清楚) good

    笔记:争取不用看下面的内容,只看自己的笔记,就能记住这个流程,就算明白了: _tWinMain-->AfxWinMain,它调用四个函数: -->AfxWinInit用于做一些框架的初始化 ...

  9. JSON工具类的构建(后端版本)

    前言 在前后端交互的选择上,之前一直采用的是模板引擎(因为我只负责后端). 而这次的一个算是作业吧,前后端都是我,所以就研究了一下JSON交互在java web的应用(主要是前端). 优缺点 前后端耦 ...

随机推荐

  1. UVA 1557 - Calendar Game(博弈dp)

    UVA 1557 - Calendar Game 题目链接 题意:给定一个日期,两个人轮流走,每次能够走一月或者一天,问最后谁能走到2001.11.4这个日子 思路:记忆化搜索,对于每一个日期,假设下 ...

  2. [置顶] ASP.NET MVC - Model Binding

    Http Request 到Input Model的绑定按照model的类型可分为四种情况. Primitive type Collection of primitive type Complex t ...

  3. 算法入门系列一--DP初步

    数字三角形(数塔问题) 其实动态规划本身并不是一个特定的算法,是一种用途广泛的问题求解方法,一种思想,一种手段. 1.1问题描述与状态定义 有一个有非负整数组成的三角形,第一行一个数字,下面各行除了最 ...

  4. Swift计算属性

    除存储属性外,类.结构体和枚举可以定义计算属性,计算属性不直接存储值,而是提供一个 getter 来获取值,一个可选的 setter 来间接设置其他属性或变量的值. struct Point { va ...

  5. oc-01

    //#ifndef __OCDay01__aa__ //#define __OCDay01__aa__ //这2行是预编译指令,防止include的时候重复包含操作(a包含b,b又包含了a) #inc ...

  6. pt-online-schema-change原理解析 博客相关需要阅读

    xiaoboluo768  http://www.lai18.com/user/481193.html   都说pt-toolkit工具集中的pt-online-schema-change可以在线不锁 ...

  7. Cisco(思科)路由器静态路由的配置

    实验拓扑 实验步骤 我们要使得 1.1.1.0/24.2.2.2.0/24.3.3.3.0/24 网络之间能够互相通信. (1)  步骤 1:在各路由器上配置 IP 地址.保证直连链路的连通性 R1( ...

  8. ethtool 在 Linux 中的实现框架和应用

    转载:http://www.ibm.com/developerworks/cn/linux/1304_wangjy_ethtools/index.html?ca=dat- 王 俊元, 软件工程师, I ...

  9. 安卓Design包之NavigationView结合DrawerLayout,toolbar的使用,FloatingActionButton

    注意:使用前需要添加Design依赖包,使用toolbar时需要隐藏标题头 FloatingActionButton 悬浮按钮:FloatingActionButton是重写ImageView的,所有 ...

  10. 给jdk写注释系列之jdk1.6容器(11)-Queue之ArrayDeque源码解析

    前面讲了Stack是一种先进后出的数据结构:栈,那么对应的Queue是一种先进先出(First In First Out)的数据结构:队列.      对比一下Stack,Queue是一种先进先出的容 ...