- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
是否可以使用 cereal 序列化 boost::ptr_vector
实例?如果是,怎么办?
最佳答案
绝对有可能。您可以在存档和指针类型上创建外部 save()
和 load()
模板函数,如下所示:
#include <iostream>
#include <sstream>
#include <boost/ptr_container/ptr_vector.hpp>
#include <cereal/archives/binary.hpp>
#include <cereal/types/string.hpp>
// Sample serializable object.
struct MyRecord {
std::string s_;
MyRecord(const std::string s = std::string())
: s_(s) {
}
template <class Archive>
void serialize(Archive& ar ) {
ar(s_);
}
};
// External save function for boost::ptr_vector<T>.
template<class Archive, class T>
void save(Archive& ar, const boost::ptr_vector<T>& pv) {
ar(pv.size());
for (const auto& element : pv)
ar(element);
}
// External load function for boost::ptr_vector<T>.
template<class Archive, class T>
void load(Archive& ar, boost::ptr_vector<T>& pv) {
size_t n;
ar(n);
pv.reserve(n);
for (size_t i = 0; i < n; ++i) {
pv.push_back(new T);
ar(pv.back());
}
}
int main() {
// Serialize a boost::ptr_vector to a buffer.
std::ostringstream os;
{
boost::ptr_vector<MyRecord> saved;
saved.push_back(new MyRecord("how"));
saved.push_back(new MyRecord("now"));
saved.push_back(new MyRecord("brown"));
saved.push_back(new MyRecord("cow"));
cereal::BinaryOutputArchive oa(os);
oa(saved);
}
// Serialize from the buffer.
boost::ptr_vector<MyRecord> loaded;
{
std::istringstream is(os.str());
cereal::BinaryInputArchive ia(is);
ia(loaded);
}
for (const auto& element : loaded)
std::cout << element.s_ << '\n';
return 0;
}
这应该适用于任何可默认构造且已经可单独序列化的包含类型。
关于c++ - 如何使用 Cereal 序列化 boost::ptr_vector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34909380/
我正在尝试使用图像处理工具(如Python中的OpenCV)将颗粒分类为有缺陷的和无缺陷的。图像之一如图所示。 我首先通过使用HSV空间进行测距来分别对 Cereal 进行分割,并应用了一些边缘检测算
我知道在 Haskell 中序列化和反序列化数据的两个主要竞争包是二进制和谷类。什么时候应该选择其中一个包而不是另一个包?还是我忽略了其他选择? 最佳答案 它们不是竞争,它们是互补的。 cereal在
我正在尝试在笔记本电脑中运行grails,已经安装了jdk 1.8.0和jre8,我已经正确设置了JAVA_HOME和GRAILS_HOME。当我在命令提示符下键入%JAVA_HOME%或%GRAIL
我有一个现有的域, Controller , View (为后者自动生成),可以在浏览器中正常工作。 如果我具有... / user / show / 1或... / user / show的URL,
我有一个grails项目,当我提交它并将其推送到bitbucket远程时,在我注意到的bitbucket中,没有推送taglib,utils,services文件夹。问题是什么?该文件夹中没有文件。但
几个星期以来一直是一个问题,没有人设法解决这个问题。 当我填充数据库时,我通过读取并解析一个Excel工作表来做到这一点。 为每条线创建一个产品 域: class Product { St
我正在尝试将OpenRDF Sesame的核心库导入Grails应用程序。 这是我的BuildConfig.groovy文件的摘录: repositories { inherits true
我在Grails应用程序中有两个域,具有一对多关系:Course和Person。一门类(class)可能有很多人。当我查看针对类(class)的show.gsp时,它将显示该类(class)注册的所有
我有一个关于在Java脚本函数中使用remoteFunction组件的问题;我正在使用Grails 1.3.7。 我的页面上有几个div,其中包含我要更新的div。我要更新的每个div都有自己的ID(
我正在使用Grails -2.0.1,并且尝试运行应用程序时,我发现了NoClassDefFoundError: 错误2012-10-16 15:24:25,301 [http-bio-8080-ex
我发现了一个特定的 100MB bin 文件(在最小示例中为 CarveObj_k5_rgbThreshold10_triangleCameraMatches.bin),其中 Cereal 无法加载抛
我应该如何继续序列化嵌套对象? 例子: class B { public: int y; template void serialize(Archive& ar) {
我不知道为什么在尝试编译时会出现此错误。我尝试添加几乎所有类型。我正在尝试序列化一组 RegDoneEntry 的 .我知道序列化的调用不在这里,但我不能超越这个。以下内容已更新以反射(reflect
我对 Cereal 很陌生,我有一个(可能很简单的)问题: 当我不知道 (XML) 存档中的对象数量时,有没有办法反序列化多个对象? 我试过类似的方法: std::ifstream is("c:\\d
我在 VS 2013 中使用 Cereal 1.1.2。 我已经尝试使用此处的类型进行存档特化的示例:http://uscilab.github.io/cereal/archive_specializ
我在序列化多态类型时遇到问题。实际上,我只是将示例拆分为:http://uscilab.github.io/cereal/polymorphism.html在几个文件中。它编译得很好但在运行时我得到一
编辑:问题标题是基于对我得到的编译器错误的深刻误解。我(愚蠢地)假设错误是,我试图反序列化到我在函数内部声明的对象。这是完全错误的。我自己没有做足够的调试工作,否则我本可以找出问题所在。所以标题很误导
好吧,我在 C++11 中遇到了 Cereal 问题 (http://uscilab.github.io/cereal/)。 在抽象意义上,我有一个大图,我正在用许多连接边和顶点的共享指针对其进行序列
我在几种序列化协议(protocol)之间做了一些性能比较,包括FlatBuffers,Cap'n Proto,Boost序列化和谷类。所有测试都是用C++编写的。 我知道FlatBuffers和Ca
我试图遍历索引 View 中的字段列表。可以说我将以下内容传递给index.gsp: [SomeDomainList: SomeDomain.list(), fields: ['field1', 'f
我是一名优秀的程序员,十分优秀!