我有一个对象数组,每个对象都有一些数据成员。我想要做的就是为每个对象创建一个文件来存储数据。这可能吗?例如,我有一个10个对象的数组,第一个对象的数据必须存储在data01.txt中,第二个对象的数据必须存储在data02.txt等中(在示例中使用的文件名格式不同,任何文件名都可以)。提前谢谢。
答案 0 :(得分:2)
你必须只编写一个函数:
std::string serializeObject(const XClass &object);
将对象的数据表示为字符串。 然后定期将序列化对象写入文件:
std::ofstream outFile;
for (...
outFile.open(sFileName);
outFile << serializeObject(..
答案 1 :(得分: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)
{
// ...
}
答案 2 :(得分: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()"}
]
}
}}