在 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/