c++ - 保存复杂的脚本对象的状态

标签 c++ python scripting embedding boost-python

在 C++ 中,我将以下两个类公开(使用 Boost)给 Python:

struct Foo {
    // Empty
};

struct FooContainer {
    // I use boost::shared_ptr for compatibility with Boost.Python
    vector<boost::shared_ptr<Foo>> foos_;
};

在 Python 方面,我可能会创建一个特殊类型的 Foo,它实际上可以做一些事情,而不仅仅是一个空类,然后将它添加到 FooContainer 中:

class Useful(Foo):
    def __init__(self, a, b):
        self.a = a
        self.b = b

x = Useful(3, 5);
# Add 'x' to a `FooContainer`

回到 C++ 方面,FooContainer 现在有一些 Foos,但它不知道也不关心它们来自 Python。应用程序运行了一段时间,Foo 对象中的数据发生了变化...

然后我决定保存我的程序状态,以便稍后加载它。但问题是 FooContainer 对它的 Foo 对象了解不多,它甚至不知道它们来自 Python,我不想用不属于它的数据污染我的 FooContainer(单-责任原则等等)。

关于我应该如何组织我的应用程序以便保存和加载数据以及加载新数据(即不是从我过去保存的状态)可以以清晰的方式完成,您有什么建议吗?

最佳答案

您可以使用 boost::python/pickle ,并保存来自 python 的数据。我对 pickling 套件的经验有限,但如果您在 python 派生的类中覆盖适当的 pickling 方法,它应该可以工作(请参阅我对 this question 的回答)。

关于c++ - 保存复杂的脚本对象的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7361944/

相关文章:

json - 创建 JSON 意外字符序列时出错

bash - 使用参数和返回值在bash中执行命令

javascript - 取消缓慢加载远程 JS 调用的最佳方法

c++ - 当多个高优先级线程在多个内核上运行时,Linux 内核无响应

android - 将 Android NDK make 文件重构为模块

c++ - openGL,C++,如何移动导入的 OBJ 对象?

python - TimeSeriesDataSet类的group_ids参数在PyTorch Forecasting中具体有什么作用?

python - 如何传递多个输入值并将结果附加回 pandas 数据框

python - IO错误: [Errno 13] Permission denied: I do have permissions?

c++ - 如何将sqlite扩展库添加到cmake以使用spellfix1