在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保存数据.我对酸洗套件的经验有限,但是只要您在python派生的类中重写适当的酸洗方法,它就可以工作(请参阅我对this question的回答).