昨天讲了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 Bubble Cup 8 - Finals [Online Mirror] F. Bulbo DP

    F. Bulbo Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/575/problem/F Des ...

  2. [转载]Android开发常用调试技术记录

    ANDROID 调试技术: 1)Ps 指令 ls –l /proc/27/ cat /proc/27/cmdline       #cmdline文件表示了这个进程所在的命令行. cat /proc/ ...

  3. 安卓开发之探秘蓝牙隐藏API

    上次讲解Android的蓝牙基本用法,这次讲得深入些,探讨下蓝牙方面的隐藏API.用过Android系统设置(Setting)的人都知道蓝牙搜索之后可以建立配对和解除配对,但是这两项功能的函数没有在S ...

  4. quickstack is a tool to take call stack

    https://github.com/yoshinorim/quickstack quickstack is a tool to take call stack traces with minimal ...

  5. 关于File.getPath,File.getAbsolutePath,File.getCanonicalPath的区别

    这个问题, 不了解一下还是挺恍惚它们之间的区别的. 其实也挺简单的. getPath()-->>new File()时的路径 getAbsolutePath()-->>当前路径 ...

  6. C# 正则表达式 学习笔记二

    1.身份证格式验证(不保证有效性)  * 身份证15位编码规则:dddddd yymmdd xx p  * dddddd:6位地区编码  * yymmdd: 出生年(两位年)月日,如:910215  ...

  7. Python 字典排序

    思路是把字典转为列表后再排序 d={'z':1,'y':2,'x':3} # 字典 s=d.items() # [('y', 2), ('x', 3), ('z', 1)] 列表 s.sort() # ...

  8. Windows环境下安装导入tornado

    首先,一台安装并配置好了python,我的python版本的肯定是2.7,直接进入tornado的环节: 下载tornado的压缩包,我的下载地址为:https://codeload.github.c ...

  9. MapReduce按照两个字段对数据进行排序

    按照k2排序,要求k2必须是可以比较的,即必须实现WritableComparable接口. 但是如果还想让别的字段(比如v2中的一些字段)参与排序怎么办? 需要重新定义k2....把需要参与排序的字 ...

  10. 关于JDK中的集合总结(二)

    1.2版本的JDK才出现的java集合框架. 下面介绍说一下Vector的一些特点. import java.util.Enumeration; import java.util.Iterator; ...