我有一个对象数组,每个对象都有一些数据成员。我想要做的就是为每个对象创建一个文件来存储数据。这可能吗?例如,我有一个包含 10 个对象的数组,第一个对象的数据必须存储在 data01.txt 中,第二个对象的数据必须存储在 data02.txt 等中(不需要与示例中使用的文件名格式相同,任何文件名都可以)。提前致谢。
问问题
1535 次
3 回答
2
您只需编写一个函数:
std::string serializeObject(const XClass &object);
它将对象的数据表示为字符串。然后例行地将序列化对象写入文件:
std::ofstream outFile;
for (...
outFile.open(sFileName);
outFile << serializeObject(..
于 2013-09-29T13:15:11.740 回答
1
如果您有兴趣将那里的文件用于各种 Web 应用程序,您可以使用 JSON 格式:http ://en.wikipedia.org/wiki/Json
{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
于 2013-09-29T16:30:53.010 回答
1
您的问题有点缺乏细节,但我假设您想将数组中的类对象保存到磁盘。
如果这种理解是正确的,那么解决方案似乎并不难。
我建议使用 boost::serialize 将您的类保存到磁盘(http://www.boost.org/doc/libs/1_54_0/libs/serialization/doc/index.html)
至于您的迭代过程,这里有一个可能有帮助的示例:
#include <string>
#include <vector>
#include <boost/shared_ptr.hpp>
#include <boost/scoped_array.hpp>
class PrettyPetunia
{
public:
PrettyPetunia(){;}
~PrettyPetunia(){;}
private:
std::string _myName;
};
typedef boost::shared_ptr<PrettyPetunia> PrettyPetuniaPtr;
typedef std::vector<PrettyPetuniaPtr> PrettyPetunias;
typedef PrettyPetunias::iterator PrettyPetuniasItr;
void SaveClassObjectOutToDisk(const char* fileName, PrettyPetuniaPtr classObjectToSave);
void IterateArrayToSaveToDisk(PrettyPetunias& petunias)
{
unsigned int loopCounter = 0;
for (PrettyPetuniasItr itr = petunias.begin(); itr != petunias.end(); ++itr )
{
boost::scoped_array<char> fileName ( new char[1024] ); // 1024 or PATH_MAX, your choice
sprintf(fileName.get(), "data%d02.txt", loopCounter);
PrettyPetuniaPtr ptr = (*itr);
SaveClassObjectOutToDisk(fileName.get(), (*itr) );
}
}
void SaveClassObjectOutToDisk(const char* fileName, PrettyPetuniaPtr classObjectToSave)
{
// ...
}
于 2013-09-29T13:17:55.720 回答