保存指针对象到系统,并在c++(不是c)中加载



我试图在c++中创建一个python对象,并将其放在一个由另一个程序使用的文件中。我所面临的问题是PyObject是一个指针,我不知道如何保存指针到文件并稍后重新加载它。我已经尝试了多种解决方案,但没有一个对我有效,例如boost。

func = PyDict_GetItemString(dict, "create_and_train");
pValue = PyObject_CallFunctionObjArgs(func, PyUnicode_FromString(file_path.c_str()), PyLong_FromLong(size), NULL);
//return feature_values, training_set
if (pValue != NULL)
{
PyObject *object = PyTuple_GetItem(pValue, 0);
}

我想保存对象指针到一个文件,然后加载它。有人能帮我吗?提前谢谢。

指针基本上是内存的地址。因为它们是动态分配的(这意味着当您计划执行内存时,内存中有空间)。这意味着,除非你保证指针的位置不会发生任何变化,否则你不能使用保存的指针。

一个选项是将对象的内存占用复制到二进制文件中。这意味着您可以在运行时立即从文件加载整个对象。但是要小心,因为如果对象有指针,它可能会因为我前面提到的原因而无法正常工作。

保存对象的内存占用非常简单,

std::ofstream file("sim.bin", std::ios::binary);
if (!file.is_open()) return;    // Bail if failed.
// Dummy object as an example.
struct DummyObject { int x = 100; };
DummyObject obj;
file.write(reinterpret_cast<char*>(&obj), sizeof(DummyObject));
file.close();

当加载内容时,

std::ifstream iFile("sim.bin", std::ios::binary);
if (!iFile.is_open()) return;   // Bail if failed.
DummyObject iobj;
iFile.read(reinterpret_cast<char*>(&iobj), sizeof(DummyObject));
iFile.close();

现在,如果DummyObject有一个指向其他东西的指针,那么我们需要将该数据的内容也复制到文件中。这会使事情稍微复杂化。

最新更新