1

オブジェクトの配列があり、各オブジェクトにはいくつかのデータ メンバーが含まれています。必要なのは、各オブジェクトにデータを格納するためのファイルを作成することだけです。これは可能ですか? たとえば、私は 10 個のオブジェクトの配列を持っています。最初のオブジェクトのデータは data01.txt に保存する必要があります。2 番目のオブジェクトのデータは data02.txt に保存する必要があります。 )。前もって感謝します。

4

3 に答える 3

2

関数を 1 つだけ記述する必要があります。

std::string serializeObject(const XClass &object);

オブジェクトのデータを文字列として表します。そして、シリアル化されたオブジェクトを定期的にファイルに書き込みます。

std::ofstream outFile;

for (...
    outFile.open(sFileName);
    outFile << serializeObject(..
于 2013-09-29T13:15:11.740 に答える
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 に答える
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 に答える