我试图在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
有一个指向其他东西的指针,那么我们需要将该数据的内容也复制到文件中。这会使事情稍微复杂化。