我有一个包含许多不同变量的类,例如其中有一些多维向量。
我听说您可以将数据直接存储和加载到文件中,但是可以到什么程度呢?
例如,如果我创建此类的实例,填充它,然后将其保存到文件中,我可以以相同的方式加载它吗?就像那是如何运作的?我是一次性保存所有数据还是必须以某种方式分割数据?
这不完全是 C++ 初学者的主题
C++ 没有自动方式将对象存储到文件或从文件加载对象。无论您选择哪种方式,您都必须自己实施。
您可能会选择超载<<
an >>
与流一起使用的运算符,或者您可能想要使用自己的运算符Load
and Store
方法(或任何您选择合适的名称,例如,Serialize
/ Deserialize
)。我个人更喜欢创建自己的函数而不使用运算符,但这只是我的想法。
这是一个简单的例子(重载<<
and >>
运营商):
#include <fstream>
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass (int x) : m_x(x), m_y(x+1) {}
friend istream& operator >> (istream& in, MyClass& obj);
friend ostream& operator << (ostream& out, const MyClass& obj);
private:
int m_x;
int m_y;
};
istream& operator >> (istream& in, MyClass& obj)
{
in >> obj.m_x;
in >> obj.m_y;
return in;
}
ostream& operator << (ostream& out, const MyClass& obj)
{
out << obj.m_x << ' ';
out << obj.m_y << endl;
return out;
}
int main(int argc, char* argv[])
{
MyClass myObj(10);
MyClass other(1);
cout << myObj;
ofstream outFile ("serialized.txt");
outFile << myObj;
outFile.close();
ifstream inFile ("serialized.txt");
inFile >> other;
inFile.close();
cout << other;
return 0;
}
值得一提的是,您应该注意序列化格式。在上面的例子中,它只是文本;但是如果您要存储大量这些对象,您可能会开始考虑序列化二进制数据(您需要使用ofstream::binary
and ifstream:binary
打开文件时标记,并且不需要额外的分隔符,例如' '
and endl
在您的序列化流中)。
通常,当您考虑序列化时,您还需要考虑流的版本控制——这是另一个单独的主题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)