2009-07-13 11 views
0

Imは、C++で抽象オブジェクトのコンテナを含むオブジェクトをシリアライズしてデシリアライズしようとしていますが、上記のコード例を誰かが知っていますか?C++で抽象オブジェクトのコンテナを含むオブジェクトを直列化および逆直列化するにはどうすればよいですか?

あなたが呼ばれるあなたの抽象クラスのメソッドを作成することができ
+0

抽象的なオブジェクトとは何ですか?抽象クラスはオブジェクトをインスタンス化できないクラスであるため、抽象オブジェクトという言葉は私には驚くほどよく聞こえます。 –

+0

私はそれがコンテナとオブジェクト自体に依存していると信じています。私の理解から、あなたはあなたのオブジェクトをシリアライズできるように、それぞれを直列化することができなければなりません。 IE:オブジェクトをシリアル化します。これはコンテナをシリアル化します。コンテナをシリアル化すると、含まれている各オブジェクトがシリアル化されます。 – dborba

+0

@ダニエル - 私は彼が意味することは、コンテナがそれが含むオブジェクトの型を認識していないということです。しかし私は間違っているかもしれません。 – dborba

答えて

1

virtual void serialize(char *out, int outLen) = 0; 

...と順番に静的デシリアライザ:

あなたのデシリアライザで
AbstractClass deserialize(char *serializedString, int strLen); 

、あなたがデシリアライズするために異なる戦略を持つことができます抽象クラスの右サブクラスです。

3

boost::serializeをご覧ください。

これには、serialization of containersを支援する方法が含まれています(リンクが左にフレームを失います)。

もちろん、そのページにスキップするだけではなく、すべてのことを読む必要があります。 :)

2

他の言語とは異なり、C++には、この種のシリアル化が「焼き付け」されていません。あなたはライブラリを使いたいと思っています。 Boost.Serialization,Google Protocol Buffers(ファイル形式でもよい)またはApache Thriftなどです。

1

ちょっと戻って同様の質問をしました。それは特に良かったディーバラの答えを見てください。このメソッドでは、抽象型の新しいオブジェクトを追加することで、既存のコードをほとんど操作できなくなります(つまり、デシリアライザにオプ​​ションを指定すると、追加のswitch/elseを追加せずにシリアル化できます)。

Best Practice For List of Polymorphic Objects in C++

関連する問題