-4

コード内のクラスを文字列にシリアル化する方法が必要です。後で、その文字列を使用して、そのクラスのインスタンスにデータを入力する必要があります。

すなわち

enum AlarmStatus
{
   Clear=0,
   Active
};

class AlarmInfo
{
public:
std::string S;
int I;
AlarmStatus alarmStatus;
void setAlarmStatus(AlarmStatus alarmStatus);
AlarmStatus getAlarmStatus();
};

コードでそれを行う方法はありますか?Boostにはクラスをシリアル化できるboost/archive /ライブラリがあることは知っていますが、それは「HeaderOnlyライブラリ」ではありませんか?ヘッダーのみのライブラリはありますか?

ありがとうございました

4

2 に答える 2

0

C++にはリフレクションがありません。したがって、C#のような他のプログラミング言語のような機能が提供されるかBinaryFormatter、実装することはできません。シリアル化は自分で実装する必要があります。XmlSerializerDataContractSerializer

(個人的には、これは良いことだと思います。しばらくしてから実装を変更したくなるので、ファイル形式を実装にそれほど結合しないでください。ファイル形式が次のように定義されているために困惑していることがわかります。そのコードの条件)

于 2012-12-12T18:31:48.840 に答える
0

シリアルコードとの間を作成し、それを呼び出します

struct Person{
  string name;
  int age;

  void toSerial(ostream& stream){ stream << name << age; }
  void fromSerial(istream& stream){  stream >> name >> age; }
}

int main(){
  Person person;
  //save to data.txt
  ofstream fileOut("data.txt");      
  person.toSerial(fileOut);
  fileOut.close();

  //load from data.txt
  ifstream fileIn("data.txt");
  person.fromSerial(fileIn);

}

于 2012-12-12T18:38:52.500 に答える