1

我有一个对象数组,每个对象都有一些数据成员。我想要做的就是为每个对象创建一个文件来存储数据。这可能吗?例如,我有一个包含 10 个对象的数组,第一个对象的数据必须存储在 data01.txt 中,第二个对象的数据必须存储在 data02.txt 等中(不需要与示例中使用的文件名格式相同,任何文件名都可以)。提前致谢。

4

3 回答 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()"}
    ]
  }
}}

BoostPoco都可以处理这种格式的敌人示例。

于 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 回答