<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Serializeable Container]]></title><description><![CDATA[<p>Hi erstmal, ich hab hier auf Arbeit mit einer interessanten Technick beim Programmieren zu tun, wir verwenden hier eine art &quot;BlockObject&quot; die sich unter anderem in TStreams serialisieren lassen, nur ist das ganze etwa unausgeglichen und ausserdem Borland -.-<br />
ich hatte mir überlegt ob ich vielleicht nicht selber eine containerklasse in dieser form schreiben kann.</p>
<p>Meine frage an euch, existiern vielleicht schon derartige containerklassen und ich hab sie nich gesehn? wenn es keine gibt, wie könnte man das eventuell angehen ? Template oder abstrakte klasse von der dann alles andere erbt ?</p>
<p>es geht hier nur um ne prizipelle diskussion, quelltexte müssen wa nicht gleich entwickeln, ich hätt auch im moment nicht wirklich zeit dafür ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/172541/serializeable-container</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 10:31:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/172541.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Feb 2007 07:44:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Serializeable Container on Tue, 06 Feb 2007 07:44:16 GMT]]></title><description><![CDATA[<p>Hi erstmal, ich hab hier auf Arbeit mit einer interessanten Technick beim Programmieren zu tun, wir verwenden hier eine art &quot;BlockObject&quot; die sich unter anderem in TStreams serialisieren lassen, nur ist das ganze etwa unausgeglichen und ausserdem Borland -.-<br />
ich hatte mir überlegt ob ich vielleicht nicht selber eine containerklasse in dieser form schreiben kann.</p>
<p>Meine frage an euch, existiern vielleicht schon derartige containerklassen und ich hab sie nich gesehn? wenn es keine gibt, wie könnte man das eventuell angehen ? Template oder abstrakte klasse von der dann alles andere erbt ?</p>
<p>es geht hier nur um ne prizipelle diskussion, quelltexte müssen wa nicht gleich entwickeln, ich hätt auch im moment nicht wirklich zeit dafür ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223628</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 06 Feb 2007 07:44:16 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Tue, 06 Feb 2007 07:55:22 GMT]]></title><description><![CDATA[<p>Die normalen STL-Container sind &quot;serialisierbar&quot;, du benötigst nur einen op&gt;&gt; bzw. op&lt;&lt; für den Elementtyp:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; data;
fstream file(&quot;data.txt&quot;,ios::in|ios::out);

...
copy(istream_iterator&lt;int&gt;(file),istream_iterator&lt;int&gt;(),back_inserter(data));//lesen
copy(data.begin(),data.end(),ostream_iterator&lt;int&gt;(file,' '));//schreiben
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1223634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223634</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 06 Feb 2007 07:55:22 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Tue, 06 Feb 2007 08:50:46 GMT]]></title><description><![CDATA[<p>naja die frage ist, lässt sich das auch auf komplexere datentypen (in form von klassen) anweden ?<br />
Es geht darum das der inhalt dynamisch ist und es eine art serialisierungsroutine geben muss um alle dynamischen speicher mit zu serialisieren und das objekt auf der anderen seite (des sockets) wieder zu assemblieren.</p>
<p>bei statischen sachen würd ja n struct reichen oder n dembläd ... falls sich das mit dem dynamischen inhalt auch mit der STL lösen lässt noch die frage, gibt es ein container template für 1 element ? weil n vektor für 1 element zu erzeugen iss n bissl überflüssig find ich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223653</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 06 Feb 2007 08:50:46 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Tue, 06 Feb 2007 09:01:34 GMT]]></title><description><![CDATA[<p>Ein einzelnes Element kannst du direkt per op&lt;&lt; schreiben und per op&gt;&gt; wieder auslesen (sofern du für deine Klasse diese Operatoren ünterstützt). Bei komplexeren Klassenstrukturen würde ich jedem Teilnehmer die Stream-Operatoren mitgeben, die dann wieder auf die Serialisierung der Member zurückgreifen, z.B.:</p>
<pre><code class="language-cpp">class CCombi
{
  CObject1 m_ob1;
  CObject2 m_ob2;
public:
  friend ostream&amp; operator&lt;&lt;(ostream&amp; out,const CCombi&amp; data)
  { return out&lt;&lt;m_ob1&lt;&lt;&quot; &quot;&lt;&lt;m_ob2; }
  friend istream&amp; operator&gt;&gt;(istream&amp; in,CCombi&amp; data)
  {
    CCombi tmp;
    in&gt;&gt;tmp.m_ob1&gt;&gt;tmp.m_ob2;
    if(in)data=tmp;
    return in;
  }
};
</code></pre>
<p>Solange du vor dem Einlesen weißt, was du für Objekte zu erwarten hast, klappt das ohne Probleme. Wenn die Zusammenstellung variieren kann (z.B. ein Container kann beliebige Objekttypen enthalten), sollte jedes Element noch eine Typkennung mit ausgeben - und zum Einlesen brauchst du eine Factory.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223659</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 06 Feb 2007 09:01:34 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Tue, 06 Feb 2007 09:02:43 GMT]]></title><description><![CDATA[<p>Naja, genau das Implementierst Du im op&lt;&lt; und op&gt;&gt; , der muss sich um diese Details kümmern , die Objekte vernünftig sichern und herstellen.</p>
<p>Wenn der Member op&lt;&lt; und op&gt;&gt; nicht unterstützt, musst Du diesen implementieren. Geht das nicht (z.B. Speicherauszug oder Handle zu einer Resource die angelegt werden muss), darfst Du Dir was einfallen lassen um das entsprechend im op&lt;&lt; und op&gt;&gt; zu Implementieren.</p>
<p>So könntest Du für eine offene Datei z.B. den Dateinamen schreiben und beim einlesen das Objekt für die Datei neu erstellen.</p>
<p>Oder den Speicherblock roh schreiben (mit nem Header davor damit Du weißt wo er anfängt und aufhört in der Datei) und beim einlesen neuen Speicher anfordern und den alten Inhalt einlesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223660</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Tue, 06 Feb 2007 09:02:43 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Tue, 06 Feb 2007 10:24:09 GMT]]></title><description><![CDATA[<p>naja mir schwebt da schon konkret was vor:</p>
<p>die abstrakte Klasse BlockObject besteht aus einem MemoryStream, in dem für jeden wert (wie abstrakt auch immer) immer ein word für die bytelänge und dann der wert selbst abgelegt werden.<br />
Am anfang des streams steht immer die gesamtlänge.</p>
<p>Die frage wäre nun wie kann ich alle enthaltenen Member-Objekte(variablen, ptr, usw.) quasi in der deklaration ausfindig machen um sie dann in der Streammethode nach definierten Regeln zu speichern ?<br />
Das Objekt soll quasi ein stream für sich sein in dem sich nur die Memberdaten mit ein wenig overhead befinden.<br />
Immer wenn ToStream() oder DoIOSave() aufgerufen wird, werden alle als objekt vorhandenen daten serialisiert (nach standardvorgaben mittels einer DoIOInt/DiIOWord/....-Methode) und in den stream geschriben werden, der wird dann zurückgegeben.</p>
<p>FromStream() oder DoIOLoad() nimmt dann quasi nur den Stream her, und arbeitet die DoIO methoden der reihe nach ab und erhält somit das komplette objekt zurück.</p>
<p>Also nochmal für die kurzleser wie erfass ich sowas wie:</p>
<p>int Var1;</p>
<p>in der deklaration einer klasse die von meiner erbt ohne eine spezielle schreibweise verwenden zu müssen? (also praktisch intern einen eintrag in eine art liste machen, erste variable in stream ist vom typ int)</p>
<p>buyakasha was hab ich mir da nur ausgedacht -.-</p>
<p>mfg</p>
<p>Ceos</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223723</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 06 Feb 2007 10:24:09 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Tue, 06 Feb 2007 10:43:03 GMT]]></title><description><![CDATA[<p>Dazu mußt du vermutlich genauer differenzieren als nur die Länge - zwei gleich große Typen können intern ganz unterschiedliche Bedeutungen haben (vergleiche int und char[sizeof(int)]). Das bedeutet, du mußt am Anfang des Objekts eher eine Art Typ-Kennung setzen, anhand der du deine Klassen (und eventuell die Build-in Typen und einige STL-Klassen wie std::string) unterscheiden kannst - wenn du den Typ kennst, kannst du auch zuordnen, wo im Stream welcher Member steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223726</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 06 Feb 2007 10:43:03 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Tue, 06 Feb 2007 11:30:15 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Dazu mußt du vermutlich genauer differenzieren als nur die Länge - zwei gleich große Typen können intern ganz unterschiedliche Bedeutungen haben (vergleiche int und char[sizeof(int)]). Das bedeutet, du mußt am Anfang des Objekts eher eine Art Typ-Kennung setzen, anhand der du deine Klassen (und eventuell die Build-in Typen und einige STL-Klassen wie std::string) unterscheiden kannst - wenn du den Typ kennst, kannst du auch zuordnen, wo im Stream welcher Member steht.</p>
</blockquote>
<p>dazu iss zu bemerken das sich das FromStream auch nur erfolgreich auf ein äquivalent gestreamtes Objekt anwenden lässt, also ist die reihenfolge und art der daten identisch, sofern der server und client in dem system mit derselben version der klasse übersetzt wurden.<br />
problematisch kann es dabei nur bei vielschichtigen template-objekten, wenn die nicht einheitliche serialisierbar sind hab ich natürlich ein problem.</p>
<p>das eigentliche Problem was sich hier ergibt iss aber eher das ich noch immer nicht weis wie ich die enthaltenen datentypen die eine erbende klasse beinhaltet erkenne um die entsprechenden DoIO-Methoden ausführen zu können.</p>
<p>Ziel des Spiel ist es eine einfach Containerklasse zu entwickeln von der man erbt ohne dabei auf die serialisierung der einzelnen daten achten zu müssen auf die man dann am ende einfach ObjektXYZ.ToStream() ausführt um sie zu serialisieren.</p>
<p>Die identifikation des serialisierten objektes liesse sich zur not noch über ein CRC verfahren regeln, damit man nicht schrottdaten lädt nur weil der progger zu blöd war die version im client zu aktualisieren ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223740</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223740</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 06 Feb 2007 11:30:15 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Tue, 06 Feb 2007 11:36:48 GMT]]></title><description><![CDATA[<p>vielleicht könnte man das auch mit ein paar geschickten PräCompiler-Anweisungen oder Makros lösen iss mir grad noch eingefallen !?</p>
<p>im eigentlichen geht es mir darum dem benutzer meineer klasse keine speziellen typdefinitionen aufzuzwingen nur weil ich die standard wie &quot;int, short, long, usw.&quot; nich rausbekomme ;p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223744</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 06 Feb 2007 11:36:48 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Tue, 06 Feb 2007 12:59:32 GMT]]></title><description><![CDATA[<blockquote>
<p>das eigentliche Problem was sich hier ergibt iss aber eher das ich noch immer nicht weis wie ich die enthaltenen datentypen die eine erbende klasse beinhaltet erkenne um die entsprechenden DoIO-Methoden ausführen zu können.</p>
</blockquote>
<p>Was spricht denn gegen eine Fabrik ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223810</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Tue, 06 Feb 2007 12:59:32 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Tue, 06 Feb 2007 14:05:39 GMT]]></title><description><![CDATA[<blockquote>
<p>Was spricht denn gegen eine Fabrik ?</p>
</blockquote>
<p>Das ich bis jetzt noch nicht weis was das sein soll, btw. im mom keine zeit hab nachzusehen, ich les heut abend nomma drüber ;p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223862</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 06 Feb 2007 14:05:39 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Tue, 06 Feb 2007 14:11:03 GMT]]></title><description><![CDATA[<p>Wenn du Zeit hast kannst du vielleicht etwas aus dem Konzept von <a href="http://www.boost.org/libs/serialization/doc/index.html" rel="nofollow">Boost::Serialization</a> übernehmen oder es gleich verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223868</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Tue, 06 Feb 2007 14:11:03 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Tue, 06 Feb 2007 14:26:55 GMT]]></title><description><![CDATA[<p>ich seh schon, hab mich da wohl ein wenig übernommen, thx for anregungen, das landet erstmal im ferienstapel wenn ich mal ernsthaft zeit und langeweile hab ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1223879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1223879</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 06 Feb 2007 14:26:55 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Wed, 21 Feb 2007 15:34:35 GMT]]></title><description><![CDATA[<p>Schau dir mal folgenden Link an, vielleicht bringt dich das ein wenig weiter <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p><a href="http://www.codeproject.com/cpp/xmlserialization.asp" rel="nofollow">http://www.codeproject.com/cpp/xmlserialization.asp</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1232691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1232691</guid><dc:creator><![CDATA[Knaecke]]></dc:creator><pubDate>Wed, 21 Feb 2007 15:34:35 GMT</pubDate></item><item><title><![CDATA[Reply to Serializeable Container on Wed, 21 Feb 2007 15:46:49 GMT]]></title><description><![CDATA[<p>thx 2 u</p>
<p>aber in unserem projekt steckt bereits etwas derartiges drinn(und das wirklich extrem umfangreich), und so wie es aussieht, darf ich mich da hineinwerfen und es ein wenig umschreiben, so verprass ich nichmal freizeit für den mist ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1232703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1232703</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Wed, 21 Feb 2007 15:46:49 GMT</pubDate></item></channel></rss>