问题标签 [cereal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
5446 浏览

c++ - 使用 Cereal 反序列化 JSON 字符串

我是 Cereal 的新手,我很难理解如何反序列化 JSON 字符串。不幸的是,我的工作防火墙限制我访问 Google 网上论坛以在留言板上发帖。

我有一个可以变成 JSON 字符串的类,但我不能终生使用该字符串并重新创建该类。任何帮助都将不胜感激,请温柔我刚从学校毕业,这是我的第一份工作,我已经超出了我的深度。

这是我得到的错误:

在抛出 'cereal::RapidJSONException' what() 实例后调用终止:rapidjson 内部断言失败:IsObject()

下面是 MyClass.hpp 类:

下面是我的 Main.cpp:

0 投票
2 回答
770 浏览

serialization - 使用谷物序列化和 boost::asio 的示例?

我正在尝试序列化对象/消息并将它们作为节点之间的 UDP 数据包发送。我目前正在寻找用于序列化的谷物和用于实际网络编程的 boost::asio。有没有一起使用这两个库的例子,即使它是伪代码?

0 投票
2 回答
212 浏览

c++ - 在 C++/Visual Studio 中使用给定数据格式(双精度、浮点数、整数、1 位布尔值)继续通过 UDP 发送数据的最佳方法?序列化?

我有数据,其中包括纬度和经度的 32 位缩放整数、xy 和 z 速度的 32 位浮点数以及一些 1 位标志。我还成功地通过 UDP 发送了至少一个 double,但它在另一端和 Wireshark 中似乎是垃圾。我需要按位访问以每秒通过 UDP 发送数据来切换/更改数据。消息格式很简单,每种数据类型都会占用它的大小并具有一定的起始位。似乎我需要序列化,但在另一端,不一定反序列化是可能的吗?我的第一个想法是创建一个包含所有数据的结构,然后通过 UDP 发送整个结构,但填充似乎是错误的。消息需要 64 字节长,并且每种数据类型都有一个起始位和格式长度。这段代码可以编译并且可以工作,但是在接收端有一个不可读的纬度。Lat、long 和 alt 每秒更新一次。有更多数据字段,但我试图从小处着手。格式的片段附有数据类型、字位置、该字中的起始位和长度(以位为单位),lat、long 和 alt 在消息中的其他位置。数据格式现在最好的想法是使用 Cereal ( http://uscilab.github.io/cereal/index.html ) 但不确定这是否是死胡同。

0 投票
1 回答
891 浏览

c++ - C++ cereal de-serialization trouble with large size vector

I hope to serialize large size vector with cereal, C++ serialization library.

But, if trying to do that, the exception "Failed to read " + std::to_string(size) + " bytes from input stream! Read " + std::to_string(readSize)" is thrown.

Does anyone know a good solution for this? I'm using VisualStudio 2017.

The source code is shown below.

0 投票
1 回答
410 浏览

c++ - 如何序列化谷物上的多维数组,C++ 序列化库

有谁知道如何在谷物、C++ 库上序列化多维数组?

我通过如下所示的源代码进行了测试。但是,它抱怨

“错误 C2338:谷物不支持序列化原始指针 - 请使用智能指针”

如代码所示,智能指针“shared_ptr”已被使用。

什么是错误的点?

0 投票
1 回答
1765 浏览

c++ - Cereal 找不到任何输出序列化函数

我不知道为什么在尝试编译时会收到此错误。我尝试添加几乎所有类型。我正在尝试序列化一组 RegDoneEntry 的。我知道序列化的调用不在这里,但我不能超越这一点。以下内容已更新以反映建议。

我现在得到的错误是

严重性代码 描述 项目文件行抑制状态错误 LNK2001 无法解析的外部符号“public: static class std::set,class std::allocator > RegDoneList::mylist” (?mylist@RegDoneList@@2V?$set@VRegDoneEntry@@U ?$less@VRegDoneEntry@@@std@@V?$allocator@VRegDoneEntry@@@3@@std@@A) CerealTest CerealTest.obj 1

和头文件:

0 投票
0 回答
1382 浏览

c++ - 谷物 std::vector 序列化

我想试一试谷物序列化库。我是初学者级别的 C++ 和退休级别的 Java :)

我尝试用它序列化向量但不能。

有什么建议吗?我有以下代码并给出错误。我在这里想念什么?

和:

但它给出了错误:

0 投票
0 回答
252 浏览

c++11 - 谷物序列化能否提高性能和确定性?

我一直在高度时间敏感的软件中使用谷物,每一微秒都很重要。我的程序循环运行并struct在每次迭代时序列化 a 。struct包含一些 STL 容器和字符串,因此大小在迭代之间可能会有所不同。

我注意到谷物在第一次序列化时完成的时间要长得多,而在随后的序列化尝试中时间要少得多。第一次大约需要 600 微秒,然后平均为 80 微秒。

在通过图书馆追踪后,我无法确定第一次尝试与其他所有尝试有什么不同。我猜这与解析 mystruct或为stringstream.

我发现这篇文章很有趣,特别是关于扩展谷物类以不使用流的建议。我试图创建一个BinaryOutputArchive使用void*缓冲区而不是 a的类的版本std::ostream,但未能成功编译。rdbuf我也尝试按照这里的stringstream 建议玩,但我无法让它正确序列化。

有没有人对如何提高谷物的性能提出建议,尤其是在第一次序列化时?或者也许是一种实现确定性延迟的方法?我的上述尝试是否走在正确的轨道上?

0 投票
1 回答
644 浏览

c++ - 带有谷物错误的 C++ 序列化:谷物不支持序列化原始指针

我正在使用Cereal C++ 序列化库(https://uscilab.github.io/cereal/index.html ) 来序列化一些数据。

我试图序列化的数据类型主要包括向量的向量(例如:)vector<vector<ushort>>和基本类型(例如:)uint, vector<string>

当我编译时,我收到以下错误:

谷歌搜索将我带到有关错误的以下页面:https ://uscilab.github.io/cereal/pointers.html

此页面表明错误的原因是序列化“哑”指针,或者序列化没有默认构造函数的类型。

但是,Graph我正在序列化的类有一个默认构造函数Graph(),我不认为我正在序列化任何“哑”指针。

相关Graph类代码:

序列化:

0 投票
1 回答
133 浏览

c++ - 在依赖于参数的查找(或解决方法?)之前发生模板替换的任何方式

我想这个问题的基本前提是我试图enable_if与 Argument Dependent Lookup (ADL) 一起使用,但我不确定它是否可能。我确实在此页面上看到

模板参数推导发生在函数模板名称查找(可能涉及依赖于参数的查找)之后和模板参数替换(可能涉及 SFINAE)和重载解析之前。

所以我想这行不通,但本着学习的精神,我想把这个问题提出来。

这是我想要发生的事情的一个例子:

该示例大致基于我正在尝试对谷物库进行的操作。就我而言,我有几种不同类型的向量和矩阵,虽然我可以使用重载来正确解析函数,但我很想使用该enable_if功能来查看是否可以缩短代码。

无论如何,尝试编译会给出一条消息“错误:变量或字段'序列化'声明为无效”。

我的理解是这不起作用,因为enable_if仅在依赖于参数的查找之后才评估?是对的吗?

对于那些想玩这个的人,我在 repl.it 上有代码:https ://repl.it/repls/HalfBlandJumpthreading