- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Boost Serialization 来保存和加载我的游戏的整体状态以及在外部存储 map 和生物数据。
我有两个程序。第一个运行游戏本身,根据保存在外部文件中的数据根据需要创建新对象。它还会生成自己状态的保存文件。到目前为止,这些都有效。
第二,我作为一名专注的编辑进行创作。我想用它来创建和操作游戏程序使用的上述文件。
所以我在第二个程序中制作了所有需要外部文件的类的镜像,但为了编辑目的而具有不同的功能。中的所有数据
void serialize(AreaArchive & aar, const unsigned int version)
{...}
这两个程序的部分类是相同的。
我用它来创建文件:
areaGen.push_back(new Area("area1"));
std::string fileName;
for(std::vector<Area*>::iterator it = areaGen.begin(); it != areaGen.end(); ++it)
{
fileName = (*it)->name + ".areabase";
std::ofstream areafile(fileName);
boost::archive::text_oarchive outArchive(areafile);
outArchive << *it;
}
文件,比方说“area1.areabase”是完美生成的 AFAIK。我将它移动到我的第一个程序的目录,执行函数
bool LoadAreaState(std::string areaName, Area *target, bool baseState)
{
std::cout << "Debug: entered area loading function..." << std::endl;
std::string fileName;
if(baseState)
fileName = areaName + ".areabase";
else
fileName = areaName + ".areafile";
std::ifstream areafile(fileName);
...
std::cout << "Debug: file opened sucessfully..." << std::endl;
boost::archive::text_iarchive inArchive(areafile);
std::cout << "Debug: inarchive to target..." << std::endl;
inArchive >> *target; // The step at which it fails - Terminate by boost::serialization's exception
std::cout << "Debug: target Area object restored..." << std::endl;
return true;
}
当然它不起作用。第一个程序和第二个程序中类的成员对象无论如何都不可能相同。可以吗?但是序列化 block 包含完全相同类型的数据。
我希望这个例子表达了我想要做的事情。但是有什么方法可以让它发挥作用吗?
非常感谢。
最佳答案
一般来说,Boost Serialization 不支持这种行为。
对于严格琐碎的(POD,当然不是虚拟类型)你将能够摆脱困境。例如。我过去曾连载过一个 map<K,V>
并将其反序列化为 flat_map<K,V>
), 对于琐碎的 K
和 V
.但是,这些都不是库的预期用途,您应该考虑未指定的行为。因此,除非您已经为自己验证了所有代码路径以确保您正在做的事情能够正常工作,否则不要对 Boost Serialization 变得聪明。
现在,这是一个应该不工作的小例子:
struct A {
int x;
virtual void display() const; {}
};
struct B {
int x
virtual void display() const; {}
};
类型将不相关,RTTI 将从 Boost 序列化中检查。
你可以
重要 Boost 序列化二进制存档不是,事实上,非常便携!你应该看看 [EOS Portable Archives](一般来说,Boost Serialization 不支持这种行为。
对于严格琐碎的(POD,当然不是虚拟类型)你将能够摆脱困境。例如。我过去曾连载过一个 map<K,V>
并将其反序列化为 flat_map<K,V>
).但是,这些都不是库的预期用途,您应该考虑未指定的行为。因此,除非您已经为自己验证了所有代码路径以确保您正在做的事情能够正常工作,否则不要对 Boost Serialization 变得聪明。
现在,这是一个应该不工作的小例子:
struct A {
int x;
virtual void display() const; {}
};
struct B {
int x
virtual void display() const; {}
};
类型将不相关,RTTI 将从 Boost 序列化中检查。
你可以
重要 Boost 序列化二进制存档不是,事实上,非常便携!你应该看看EOS Portable Archives如果你想在不同机器之间共享文件等等。) 如果你想在不同的机器之间共享文件等等。
关于C++ Boost::serialization:如何在一个程序中归档一个对象并在另一个程序中恢复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27073936/
我正在阅读许多 plist 并将它们显示在 UITableview 中。问题是,应用程序本身非常慢,我确实阅读了一些有关归档或序列化的内容,归档是否会使应用程序更快,或者如果我想使用大量数据,我应该尝
我用谷歌搜索并搜索了 SO,但没有直接的结果。看来我对 Apple 文档中的以下内容存在根本性的误解: An archive can store an arbitrarily complex obje
刚开始学习 iOS,我有一个非常基本的问题:归档/取消归档整个对象集合的正确方法是什么? 我了解到您首先需要在类上实现 NSCoder 协议(protocol)。假设我有一个可以正确归档和取消归档的类
所以这是我的问题。我正在尝试归档一个对象数组,当我取消归档它们时,尽管计数相同并且根对象内的对象相同,但它在未归档的数组中找不到指定的对象。 -(void)tableView:(UITableView
我需要归档一个由 ArrayController 控制的 NSMutableArray。我试过这个: [NSKeyedArchiver archivedDataWithRootObject:array
我想存档只包含 NSString 的字典,但是当我取消存档时,发生错误: [NSKeyedUnarchiver initForReadingWithData:]: non-keyed archive
我想存档每个构建的构建日志,例如到数据库。我知道如何归档工件,但我没有在构建日志中看到任何明显的内容。 最佳答案 我想您需要在归档之前结束您的工作。以下是一个 Groovy 脚本,它使用不同的方法来获
因此,我正在尝试将我的 iPhone 应用程序存档以进行临时测试,但我遇到了一些奇怪的情况。当我归档它时,在它显示归档类型的顶部,由于某种原因,它显示“Mac 应用程序归档”而不是通常的“iOS 应用
我正在使用 java Spring 和 spring data for mongodb。 我有一个集合,需要仅包含过去 3 个月的文档,但所有文档都应以某种方式保存(也许导出到文件?)。我正在寻找解决
我的应用程序使用了一个我插入的附加项目,我链接它然后使用以下代码导入它: #import 如果我正常运行应用程序,应用程序工作正常,但如果我按下存档按钮,上面报告的代码行就会出错。它说:找不到 SB
我有多个表。如表 1、表 2、表 3 等 需要什么: 1. 从表 1 中获取特定行。 (例如:id = 203) 2. 从 table2 中获取与 id 203 相关的所有值(例如:1,2,3,4,5
我正在尝试使用 Xcode 4.3.2 将我的应用存档到一个 .ipa 文件中以发送到应用商店,但在尝试存档时出现此错误: 'KKGridView/KKGridView.h' file not fou
这个问题在这里已经有了答案: Find and xargs to correctly handle filenames with spaces in their names (3 个答案) 关闭 3
我正在创建一个在线订单系统,用于定期销售商品(蔬菜盒送货上门)。我有一个“订单”模型(简化)如下: class BoxOrder(models.Model): customer = model
我已经检查过我的应用程序产品大小约为 10MB,但是当我构建它进行归档时,它显示 Appstore 大小为 20MB,即它几乎翻了一番。但是当我在文件夹中看到存档时,它的大小仍然是 10MB,我不知道
我使用的是 Mercurial 1.7.2。在 Windows 上,我想提取指定更改集中的所有文件(在我的案例提示中)。这样我就可以只将我已更改的文件上传到我的网络服务器。 如果我想获取整个存储库的未
我正在为使用 iOS 6 的 iPad 项目开发 Objective-C 代码库。 在我将类“ClassA”的名称重构为“ClassB”之后,我发现以下测试失败了: NSData *encodedOb
我的 Xcode 项目能够在模拟器上成功构建和运行,但是当我尝试将其存档时出现一个问题,提示该项目无法导入桥接 header 。 这是在模拟器上运行的图像应用。 现在,当我尝试将其存档到通用 IOS
我是 IOS 新手。我已经开发了一个 IOS 应用程序,现在我想在 iTunes 上发布这个应用程序。我已经创建了证书、应用程序 ID,然后是临时配置文件。我已成功将此添加到“build设置”的“代码
我有一个文件,其中包含我想用 tar 归档的文件列表。我们称之为 mylist.txt 它包含: file1.txt file2.txt ... file10.txt 有没有办法可以发出以 mylis
我是一名优秀的程序员,十分优秀!