我有一个包含许多不同变量的类,例如那里有一些多维向量.
我听说你可以直接将数据存储和加载到文件中,但程度如何呢?
例如,如果我创建此类的实例,填充它,然后将其保存到文件,我可以以相同的方式加载它吗?喜欢它是如何工作的?我只是一次性保存它还是我必须以某种方式分割数据?
这不是C++中初学者的主题
C++没有自动方式将对象存储/加载到文件中.无论你选择哪种方式,你都必须自己实施.
你可能会选择超载<<的>>运营商提供流使用,或者你可能想要去与自己Load和Store方法(或任何名字您选择合适的,喜欢Serialize/ Deserialize).我个人更喜欢创建自己的功能而不是使用运算符,但它只是我.
这是一个简单的例子(带有重载<<和>>运算符):
#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;
}
Run Code Online (Sandbox Code Playgroud)
值得一提的是,您应该注意序列化格式.在上面的例子中,它只是文本; 但是如果你要存储很多这些对象,你可能会开始考虑序列化二进制数据(在打开文件时你需要使用ofstream::binary和ifstream:binary标记,并且不需要额外的分隔符,比如' '和endl你的序列化流中).
通常,当您考虑序列化时,您还需要考虑流的版本控制 - 这是另一个单独的主题.
| 归档时间: |
|
| 查看次数: |
23766 次 |
| 最近记录: |