В 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 данными, которые на самом деле не принадлежат ему (одно- принцип ответственности и все такое).
Есть ли у вас какие-либо советы о том, как мне организовать свое приложение таким образом, чтобы сохранение и загрузка данных, а также загрузка свежих данных (т. Е. Не из состояния, которое я сохранял в прошлом) могут быть выполнены ясным способом?