Java有一种非常简单的方法来序列化对象.在C++中找不到类似的东西.我找到了Boost Serialization,以及使用ifstream和ofstream 的基本方法.
我有一个Task类,它有标题,id,状态和日期/时间.我想在类中实现一个序列化函数,以二进制模式保存该对象.但我想在一个二进制文件中保存该类的多个实例.比方说,一个Task数组.
在类上实现序列化方法是一种好方法吗?它只会一次序列化一个,如果我使用ifstream/ofstream,它看起来不太好,因为我会打开和关闭文件很多.此外,每个任务都将保存在不同的文件中.
Boost的序列化看起来很好,但如果可能的话,最好避免第三方依赖.
实现这一目标的最佳方法是什么?
我的班级标题:
#ifndef TASK_H
#define TASK_H
class Task {
public:
enum Status { COMPLETED, PENDIENT };
Task(std::string text);
~Task();
// SETTERS
void setText(std::string text);
void setStatus(Status status);
// GETTERS
const std::string getText() const;
const bool getStatus() const;
const int getID() const;
const int getCount() const;
const std::string getDate() const;
const std::string getTime() const;
// DATE
const int getDay() const;
const int getMonth() const;
const int getYear() const;
// TIME
const int getSecond() const;
const int getMinute() const;
const int getHour() const;
// UTILS
//serialize
const void printFormatted() const;
// OVERLOAD
bool operator==( const Task &text2 ) const;
private:
void setID();
static int sCount;
int id;
std::string text;
Status status;
tm *timestamp;
};
#endif
Run Code Online (Sandbox Code Playgroud)
如果你只有一个非常简单的类来序列化,那么实现一个序列化函数并不难,它会写出你需要保存的少数几个成员.你没有给出一个显示你的类的代码示例,但只要没有涉及指针,只需要少数成员就可以比较容易.如果你写出序列化的对象数量,然后写出其中包含的数据,这可能足以满足你的目的.
如果你想自己实现序列化,我会有一个外部函数(可能是你的类的朋友)处理Task数组的序列化,而不是试图将数组序列化放入你的类.您可以做的是serialiseObject()向类中添加一个函数,该函数序列化单个对象,然后从数组序列化函数重复调用它.这是一个更清洁的设计,而不是将阵列序列化也固定在类本身上.
一旦你进入序列化更复杂的C++对象,尤其是那些包含引用和指针的对象,序列化很快就会成为一个难题,你真的,真的想要使用经过充分测试的现有第三方机制.
也就是说,作为以C++开发为生的人,我认为对boost的依赖是正常的,而不是我想要避免的第三方库.Boost为您提供了许多额外的功能,我认为它是"我的标准库"的一部分.