- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
编辑:问题标题是基于对我得到的编译器错误的深刻误解。我(愚蠢地)假设错误是,我试图反序列化到我在函数内部声明的对象。这是完全错误的。我自己没有做足够的调试工作,否则我本可以找出问题所在。所以标题很误导,我改了。感谢 Андрей Беньковский 的帮助。
我正在使用 cereal 在我的引擎中为 3D 模型编写序列化函数,事实证明它非常高效且易于使用。到目前为止,当我测试(反)序列化一个简单的网格时,一切都很好。但现在我正在尝试反序列化另一个类,但遇到了一个我没有得到的问题。
void loadFile(std::string filepath)
{
DescriptionFile file;
{
ifstream stream = ifstream(filepath, std::ifstream::binary);
PortableBinaryInputArchive archive(stream);
archive(file);
stream.close();
}
}
这是我的类,应该反序列化:
struct DescriptionFile
{
public:
DescriptionFile(){}
map<string, MeshDescription*> meshDescriptions;
map<string, ModelDescription*> modelDescriptions;
public:
template<class Archive>
void serialize(Archive & archive)
{
archive(meshDescriptions, modelDescriptions);
}
};
它给我编译器错误:Cereal 不支持序列化原始指针 - 请使用智能指针即使它不是指针。在代码的另一部分,类似的东西工作得很好。如果有人能帮我解决这个问题,我会很高兴。
最佳答案
我从未使用过 Cereal,但看起来它希望您使用这样的东西:
map<string, unique_ptr<MeshDescription> >
获取std::unique_ptr我通常#include <memory>
来自 cereal documentation :
cereal 支持序列化智能指针但不支持哑指针(也就是说原始指针,例如 int *
)或引用。可以通过包含 <cereal/types/memory.hpp>
找到指针支持.
可能这意味着您必须包含他们的 header 而不是标准 header 。
附言当您的对象拥有资源(例如动态分配的 MeshDescription
)时,始终将资源管理(分配、释放、复制等)委托(delegate)给单独的类(智能指针、集合、包装器等)。参见 rule of 0 .
关于c++ - Cereal 不支持原始指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33345211/
我正在尝试使用图像处理工具(如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
我是一名优秀的程序员,十分优秀!