昨天讲了Struct,还是不够满意,毕竟C++里面类用的比较多嘛,那就先上个类,

这段代码是我稍微改编了一下的结果。都是最基本的用法。

#include <utility>
#include <iostream>
#include <vector>
#include "caf/all.hpp" using std::cout;
using std::endl;
using std::make_pair;
using std::vector;
using namespace caf;
class foo { private:
int a_;
vector<int> b_;
public: foo(int a0 = , vector<int> b0 = vector<int>()) : a_(a0), b_(b0) { } foo(const foo&) = default; foo& operator=(const foo&) = default; int a() const { return a_; } void set_a(int val) { a_ = val; } vector<int> b() const { return (vector<int>)b_; } void set_b(const vector<int> val){ b_ = val; }
}; bool operator==(const foo& lhs, const foo& rhs) {
return lhs.a() == rhs.a()
&& lhs.b() == rhs.b();
} void testee(event_based_actor* self) {
self->become (
[=](const foo& val) {
aout(self)<< val.a()<<endl;
auto b = val.b();
for (auto it = b.begin(); it != b.end(); ++it)
{
aout(self)<<*(it)<<endl;
}
self->quit();
}
);
} int main(int, char**) { //###################First method####################
announce<foo>("foo", make_pair(&foo::a, &foo::set_a),
make_pair(&foo::b, &foo::set_b)); //####################Second method####################
//a member function pointer to get an attribute of foo
using foo_getter = int (foo::*)() const;
using foo_getter1 = vector<int> (foo::*)() const;
// a member function pointer to set an attribute of foo
using foo_setter = void (foo::*)(int);
using foo_setter1 = void (foo::*)(const vector<int>); foo_getter g1 = &foo::a;
foo_setter s1 = &foo::set_a;
// same is true for b
foo_getter1 g2 = &foo::b;
foo_setter1 s2 = &foo::set_b;
announce<foo>("foo", make_pair(g1, s1), make_pair(g2, s2)); //####################Third method######################
// alternative syntax that uses casts instead of variables
// (returns false since foo is already announced)
announce<foo>("foo",
make_pair(static_cast<foo_getter>(&foo::a),
static_cast<foo_setter>(&foo::set_a)),
make_pair(static_cast<foo_getter1>(&foo::b),
static_cast<foo_setter1>(&foo::set_b))); {
scoped_actor self;
auto t = spawn(testee);
self->send(t, foo{,{,}});
}
await_all_actors_done();
shutdown();
return ;
}

贴上结果

CAF 告诉我们,你想在消息中传送一个类,你只要告诉它你所有成员的getter 和setter函数,然后呢它提供了三种方式,(一般就选第一种 没有任何区别的 =  = )。

稍微再深入一些的是类里面再套类对象,其实也是很方便。只是多了一个嵌套。可以看github上announce4.cpp

https://github.com/actor-framework/actor-framework/blob/master/examples/type_system/announce_4.cpp

还有一个小东西值得一讲,using的用法 

using foo_setter1 = void (foo::*)(const vector<int>);

就是声明一个函数指针,指向了foo类里的一个成员函数,参数为一个const 向量,返回值为void。

举一反三,map,pair 都是一样的。只要是C++ 标准的STL都是可以的。

最后还有一篇想讲一下自己对announce5的代码理解和改编吧。

---------------------------2016.4.4-------------------------------

试了一下枚举类型是不需要announce的 但是编译通过了,运行,接受不到后来把枚举再转化为int就好了。

CAF(C++ actor framework)(序列化之类,无需序列化,直接传)(二)的更多相关文章

  1. day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能

    目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...

  2. Django REST framework 中文教程1:序列化

    建立环境 在我们做任何事情之前,我们将使用virtualenv创建一个新的虚拟环境.这将确保我们的包配置与我们正在开展的任何其他项目保持良好的隔离. virtualenv envsource env/ ...

  3. Django rest framework(6)----序列化

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...

  4. C#中的二进制序列化和Json序列化

    序列化就是把一个对象变成流的形式,方便传输和还原.小弟不才,总结下对二进制序列化和Json序列化的使用: 1.首先,二进制序列化(BinaryFormatter)要求要序列化的类必须是可序列化的(即在 ...

  5. Django-Rest-Framework的序列化之serializers 序列化组件

    Django-Rest-Framework的序列化之serializers 序列化组件 restful framework 正常的序列化 from django.http import HttpRes ...

  6. [LeetCode] Serialize and Deserialize BST 二叉搜索树的序列化和去序列化

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

  7. [LeetCode] Serialize and Deserialize Binary Tree 二叉树的序列化和去序列化

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

  8. java编解码技术,json序列化与二进制序列化

    1.何为json序列化与二进制序列化 通常我们在程序中采用的以json为传输,将json转为对象的就是json序列化了.而二进制序列化通常是我们将数据转换为二进制进行传输,然后在进行各类转换操作 2. ...

  9. [LeetCode] Serialize and Deserialize N-ary Tree N叉搜索树的序列化和去序列化

    Serialization is the process of converting a data structure or object into a sequence of bits so tha ...

  10. Effective Java 第三版—— 90.考虑序列化代理替代序列化实例

    Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...

随机推荐

  1. Codeforces Round #313 (Div. 2) A. Currency System in Geraldion 水题

    A. Currency System in Geraldion Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/c ...

  2. delphi 14 内容编辑

    撤销 重做 - 复制 剪切 粘贴 删除 - 全选 不选       ///编辑 ///撤销    WebBrowser1.ExecWB(OLECMDID_REDO ,1); ///重做    WebB ...

  3. 保存form配置信息INI

    (* 功能:IniFormState1 保存和读取 窗体的大小2 保存和读取 窗体在屏幕上的位置//让程序第1次出现在屏幕的中心点获取屏幕的中心点POSITION:poScreenCenter //不 ...

  4. Yii框架学习 新手教程(一)

    本人小菜鸟一仅仅,为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识,小菜鸟创建了一个群.希望光临本博客的人能够进来交流.寻求 ...

  5. Java_InvokeAll_又返回值_多个线程同时执行,取消超时线程

    package com.demo.test4; import java.util.ArrayList; import java.util.List; import java.util.concurre ...

  6. c#_表单处理方式

    阅读目录 开始 简单的表单,简单的处理方式 表单提交,成功控件 多提交按钮的表单 上传文件的表单 MVC Controller中多个自定义类型的传入参数 F5刷新问题并不是WebForms的错 以Aj ...

  7. 利用 Composer 完善自己的 PHP 框架(一)——视图装载

    本教程示例代码见 https://github.com/johnlui/My-First-Framework-based-on-Composer 回顾 经过了上一个 系列教程  <利用 Comp ...

  8. c语言中文件的操作

    所谓“文件”是指一组相关数据的有序集合.这个数据集有一个名称,叫做文件名.实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件.库文件 (头文件)等. 文件通常是驻留在外部 ...

  9. Linux 学习笔记 查看文件内容诸多命令

    查看文件内容 1.查看文件统计信息 stat 提供文件系统上某个文件的所有状态信息 2.查看文件类型 file 用来查看文件类型 (该命令将文件分成3类:文本类型:可执行文件:数据文件) 如果你有从未 ...

  10. Extjs之success、failure

    Ext.form.Action.Submit的配置选项success.failure是根据返回json中success属性判断的,如果success为true,则success,false则failu ...