【发布时间】:2012-10-07 03:41:06
【问题描述】:
Java 有一种非常简单的方法来序列化对象。在 C++ 中找不到类似的东西。 我使用 ifstream 和 ofstream 找到了 Boost Serialization 和 basic approach。
我有一个任务类,它有一个标题、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
【问题讨论】:
-
只要你的对象是单一的并且简单的序列化就是小菜一碟。开始添加对其他对象的内部引用,随着身份和所有权问题开始出现丑陋的一面,事情会很快变得复杂。
-
将时间戳记为 tm* 而不是 tm 有什么具体原因吗?
标签: c++ serialization