<?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[delete mit zeiger anderen types?]]></title><description><![CDATA[<p>Hallo</p>
<p>ich habe eine abstrakte Basisklasse</p>
<pre><code class="language-cpp">struct base
{
    virtual ~base(){}
    virtual void tu_was() = 0;
};
</code></pre>
<p>sowie ein klassentemplate was davon erbt</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class derived : public base
{
public:
    void tu_was(){}
private:
    T t;
};
</code></pre>
<p>soweit so gut.</p>
<p>jetzt möchte ich eine solche klasse in einer factory erzeugen, ich habe jedoch<br />
nicht T, sondern nur sizeof(T). ich weiß also, wie groß das ganze ding mal wird.</p>
<p>die virtuellen funktionen sind auch die selben.</p>
<p>ich dachte mir zuerst, man könnte einfach ein beliebiges derived&lt;ganz_kleiner_typ&gt;<br />
da rein kopieren, um wenigstens die vtbl zu haben. die daten &quot;t&quot; habe ich auch.<br />
somit wäre das objekt komplett konstruiert.</p>
<p>nur... wie allokiere ich den speicher? den genauen typ kenne ich nicht, nur die<br />
größe. man könnte jetzt ein char-array allokieren, nur ob das funktioniert?</p>
<p>z.b.</p>
<pre><code class="language-cpp">base *Construct(unsigned size)
{
    unsigned size_of_vtbl = sizeof(derived&lt;char&gt;) - sizeof(char);
    base *b = new char[size_of_vtbl + size];
    *b = derived&lt;char&gt;(); // vtbl reinkopieren
    // daten reinkopieren
    return b;
}
derived&lt;int&gt; *d = Construct(sizeof(int));
delete d;
</code></pre>
<p>ich würde gerne ein ganz normales delete verwenden können, um die instanz am<br />
ende zu entsorgen. virtueller dtor sollte ja gesetzt sein.</p>
<p>klappt das? gibt es eine methode das ohne gefrickel zu erreichen?</p>
<p>(hintergrund: deserilisation einer klasse).</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/252043/delete-mit-zeiger-anderen-types</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 01:24:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/252043.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Oct 2009 20:23:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Tue, 13 Oct 2009 20:23:07 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>ich habe eine abstrakte Basisklasse</p>
<pre><code class="language-cpp">struct base
{
    virtual ~base(){}
    virtual void tu_was() = 0;
};
</code></pre>
<p>sowie ein klassentemplate was davon erbt</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class derived : public base
{
public:
    void tu_was(){}
private:
    T t;
};
</code></pre>
<p>soweit so gut.</p>
<p>jetzt möchte ich eine solche klasse in einer factory erzeugen, ich habe jedoch<br />
nicht T, sondern nur sizeof(T). ich weiß also, wie groß das ganze ding mal wird.</p>
<p>die virtuellen funktionen sind auch die selben.</p>
<p>ich dachte mir zuerst, man könnte einfach ein beliebiges derived&lt;ganz_kleiner_typ&gt;<br />
da rein kopieren, um wenigstens die vtbl zu haben. die daten &quot;t&quot; habe ich auch.<br />
somit wäre das objekt komplett konstruiert.</p>
<p>nur... wie allokiere ich den speicher? den genauen typ kenne ich nicht, nur die<br />
größe. man könnte jetzt ein char-array allokieren, nur ob das funktioniert?</p>
<p>z.b.</p>
<pre><code class="language-cpp">base *Construct(unsigned size)
{
    unsigned size_of_vtbl = sizeof(derived&lt;char&gt;) - sizeof(char);
    base *b = new char[size_of_vtbl + size];
    *b = derived&lt;char&gt;(); // vtbl reinkopieren
    // daten reinkopieren
    return b;
}
derived&lt;int&gt; *d = Construct(sizeof(int));
delete d;
</code></pre>
<p>ich würde gerne ein ganz normales delete verwenden können, um die instanz am<br />
ende zu entsorgen. virtueller dtor sollte ja gesetzt sein.</p>
<p>klappt das? gibt es eine methode das ohne gefrickel zu erreichen?</p>
<p>(hintergrund: deserilisation einer klasse).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792243</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Tue, 13 Oct 2009 20:23:07 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Tue, 13 Oct 2009 21:03:30 GMT]]></title><description><![CDATA[<p>was du var hast ist unfug.</p>
<p>klar kann man ein objekt über einen basisklassen-zeiger löschen, aber du kannst es nicht einfach anlegen, wenn du nur die grösse kennst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792253</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 13 Oct 2009 21:03:30 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Tue, 13 Oct 2009 21:15:44 GMT]]></title><description><![CDATA[<p>wie sollte man den vorgehen, wenn man nur die größen kennt.</p>
<p>ich möchte einen datenstrom deserialisieren, und mehr als die größe hab ich halt<br />
nicht (und die daten).</p>
<p>und für jeden kleinen fitzeltyp eine factory erstellen...</p>
<p>das muss doch irgentwie gehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792259</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Tue, 13 Oct 2009 21:15:44 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Tue, 13 Oct 2009 21:20:02 GMT]]></title><description><![CDATA[<p>helferlein schrieb:</p>
<blockquote>
<p>wie sollte man den vorgehen, wenn man nur die größen kennt.</p>
<p>ich möchte einen datenstrom deserialisieren, und mehr als die größe hab ich halt<br />
nicht (und die daten).</p>
<p>und für jeden kleinen fitzeltyp eine factory erstellen...</p>
<p>das muss doch irgentwie gehen?</p>
</blockquote>
<p>Hast beim Speichern vergessen, den Typ mitzugeben. Statt vorher einem 32-Bitter, der die größe angibt, hätte auch ein Byte gereicht, der den Typ angibt, vorausgesetzt, Du hast Dir vorher eine Liste der Typen gemacht, die Du serialisieren können willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792261</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 13 Oct 2009 21:20:02 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Tue, 13 Oct 2009 21:38:45 GMT]]></title><description><![CDATA[<p>was wieder auf eine factory hinauslaufen würde, wo ich jedes int, jede<br />
struct registireren müsste, oder nochschlimmer hardcoden müsste.</p>
<p>für die klassen gibt es schon eine factory, ich versuchs einfach mal damit...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792269</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Tue, 13 Oct 2009 21:38:45 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Wed, 14 Oct 2009 05:23:12 GMT]]></title><description><![CDATA[<p>helferlein schrieb:</p>
<blockquote>
<p>was wieder auf eine factory hinauslaufen würde, wo ich jedes int, jede<br />
struct registireren müsste, oder nochschlimmer hardcoden müsste.</p>
</blockquote>
<p>Und das manuelle zusammenkopieren von Typen allein anhand ihrer Größe ist kein hardcoden? Und was machst Du wenn mal zwei Deiner Datentypen die gleiche Größe haben?</p>
<p>Nebenbei, Dir ist schon bewußt das die Größe einer Klasse/Struct von den Compilereinstellungen (-&gt;byte-alignment) abhängig ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792328</guid><dc:creator><![CDATA[loks]]></dc:creator><pubDate>Wed, 14 Oct 2009 05:23:12 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Wed, 14 Oct 2009 11:51:09 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>: sicher das ein byte reicht für alle typen? <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>@loks: das alignment ist bei sizeof schon drin. kein problem.</p>
<p>es geht auch nicht darum, anahnd der größe die typen zu erkennen, es geht<br />
nur darum einen spiecherblock dieser größe zu allokieren und diesen dann<br />
als klasse zu interpretieren.</p>
<p>würde man über eine weitere indirektionsebene gehen, sprich in der klasse<br />
einen verweis auf den speicher zu habenm würde das gehen, allderdings wäre es<br />
doch schöner, wenn die daten auf dem stack liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792502</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Wed, 14 Oct 2009 11:51:09 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Wed, 14 Oct 2009 12:20:17 GMT]]></title><description><![CDATA[<p>helferlein schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/106">@volkard</a>: sicher das ein byte reicht für alle typen? <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>
</blockquote>
<p>Eigentlich schon. Weil typischerweise in einer Datei (Dateiabschnitt) eine List(Of Basisklasse) steht. Hab noch keine Basisklasse gesehen, die 256 Blätter in der Klassenhierarchie hat. Basisklassen und members brauchen keine Typkennzeichnung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792525</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 14 Oct 2009 12:20:17 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Wed, 14 Oct 2009 17:30:28 GMT]]></title><description><![CDATA[<p>helferlein schrieb:</p>
<blockquote>
<p>@loks: das alignment ist bei sizeof schon drin. kein problem.</p>
</blockquote>
<p>Doch, trotzdem ein Problem. Wenn dir Compiler XY 2 Bytes Padding einfügt und Compiler AB 4 zum Beispiel. Oder wenn Fliesskommazahlen (generell Datentypen) anders repräsentiert werden. Oder wenn die Klasse einmal verändert wird. Oder...</p>
<p>Auf jeden Fall: Unterschätze solche implementierungsabhängigen Dinge nicht. Binär serialisieren ist recht heikel und vor allem unportabel.</p>
<p>helferlein schrieb:</p>
<blockquote>
<p>es geht auch nicht darum, anahnd der größe die typen zu erkennen, es geht<br />
nur darum einen spiecherblock dieser größe zu allokieren und diesen dann<br />
als klasse zu interpretieren.</p>
</blockquote>
<p>Du kannst es mit PODs versuchen und <code>reinterpret_cast</code> oder <code>memcpy()</code> einsetzen. Bedenke allerdings, dass hier das Verhalten grundsätzlich undefiniert ist und die kleinste Unstimmigkeit ausreicht, um massive Probleme zu verursachen. Nicht zuletzt wegen der genannten unterschiedlichen Datenrepräsentationen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792653</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 14 Oct 2009 17:30:28 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Wed, 14 Oct 2009 19:40:19 GMT]]></title><description><![CDATA[<p>natürlich. wenn man den compiler wechselt <strong>kann</strong> alles schief gehen, was<br />
ein gewisses memory-layout erfordert.</p>
<p>serialisation ist generell nicht einfach, ich versuche erstmal eine variante<br />
(binär) zum laufen zu bekommen. später wird das ganze um eine textversion<br />
(wird wohl XML werden) erweitert.</p>
<p>PODs würden vllt funktionieren, jedoch die ganze schöne objektorientierung<br />
inkl. polymorphie kaputtmachen.</p>
<p>habs erstmal mit externen verweisen auf PODs gelöst, hoffe das wird noch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792698</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Wed, 14 Oct 2009 19:40:19 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Wed, 14 Oct 2009 22:50:08 GMT]]></title><description><![CDATA[<p>helferlein schrieb:</p>
<blockquote>
<p>es geht auch nicht darum, anahnd der größe die typen zu erkennen, es geht<br />
nur darum einen spiecherblock dieser größe zu allokieren und diesen dann<br />
als klasse zu interpretieren.</p>
</blockquote>
<p>das ist totaler blödsinn und wird nicht funktionieren.<br />
nur mit der Größe kann man keine Objekte erzeugen.<br />
Wer ruft denn die Konstuktoren auf?<br />
Das müsste dann der Benutzer ja selbst mittels placement new machen um sein Objekt in den bereitgestelltnen speicher zu bekommen.</p>
<p>Was hindert dich daran, eine vernünftige class-Factory zu bauen, die dir nach übergabe eines Schlüssels (string oder int, oder sontst was) ein entsprechende Objekt erzeugt und nen Basisklassenzeiger zurückgibt</p>
<p>edit:<br />
selbst wenn du keine Konstruktoren definiert hast, wird automaitshc einer erzeugt, da bei polymorphen Klassen mindestens die vtables gefüllt werden müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792751</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Wed, 14 Oct 2009 22:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Thu, 15 Oct 2009 10:53:38 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>das ist totaler blödsinn und wird nicht funktionieren.<br />
nur mit der Größe kann man keine Objekte erzeugen.</p>
</blockquote>
<p>deswegen frag ich ja wie das anders gemacht werden kann.</p>
<p>factorys sind natürlich möglich, nur <strong>sehr</strong> aufwändig. wenn ich<br />
jeden typ, int, float, structs (jede verschiedene struct)registrieren müsste,<br />
dann gute nacht. user-defined klassen müssen per factory erzeugt werden, aber<br />
bei PODs sollte das doch zu vermeiden sein?!</p>
<p>die bisherige lösung besteht wie bereits gesgt aus einem exteren speicher.<br />
damit kann ich immer dieselbe POD-verwaltungsklasse einsetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792841</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Thu, 15 Oct 2009 10:53:38 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Thu, 15 Oct 2009 11:14:57 GMT]]></title><description><![CDATA[<p>helferlein schrieb:</p>
<blockquote>
<p>aber bei PODs sollte das doch zu vermeiden sein?!</p>
</blockquote>
<p>Kommt darauf an, was du dir vorstellst. Wie willst z.B. einen 32bit-integer von einem 32bit-float unterscheiden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792848</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 15 Oct 2009 11:14:57 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Thu, 15 Oct 2009 12:12:29 GMT]]></title><description><![CDATA[<p>überhaupt nicht.</p>
<pre><code class="language-cpp">class test
{
public:
    float f;
    int i;
};

// ...serialisieren

test *t = dynamic_cast&lt;test *&gt;(Deserialise(stream)); // dyn_cast nur als beispiel
</code></pre>
<p>da es klassenfactorys gibt, muss ich nur dafür sorgen, dass die daten am richtigen<br />
platz sind. nach der deserialisierung kann ich die erstellte klasse ganz normal<br />
verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792865</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Thu, 15 Oct 2009 12:12:29 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Thu, 15 Oct 2009 12:22:41 GMT]]></title><description><![CDATA[<p>Wie behandelst Du einen std::string?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792869</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 15 Oct 2009 12:22:41 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Thu, 15 Oct 2009 13:41:59 GMT]]></title><description><![CDATA[<p>das ganze ist zum scheitern verurteilt.<br />
Wie schon gesagt wurde:<br />
die serialisierung des Speichers eines gesammten Objektes macht keinen Sinn.<br />
Ein mal neu kompilieren mit wenigen Änderungen und du kannst alle alten dateien wegschmeißen.<br />
Ganz zu schweigen von einer Compileränderung.</p>
<p>bei deiner Methode die Daten aus dem Stream zu holen: woher weißt du wie groß das objekt ist?<br />
Was machst du mit T, die nicht nur Kompositionen aus Elementardatentypen sind und zB selbst speicher anfordern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792914</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Thu, 15 Oct 2009 13:41:59 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Thu, 15 Oct 2009 15:40:04 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>Ein mal neu kompilieren mit wenigen Änderungen und du kannst alle alten dateien wegschmeißen.<br />
Ganz zu schweigen von einer Compileränderung.</p>
</blockquote>
<p>natürlich. aber sobald die serialisierung fertig ist, muss sie nicht mehr geändert<br />
werden. der rest kann sich ruhig ändern.</p>
<p>die größe wird im stream mitgespeichert.<br />
einen std::string sowie bestimmte typen bekommen eine eigene behandlung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1792976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1792976</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Thu, 15 Oct 2009 15:40:04 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Thu, 15 Oct 2009 18:26:34 GMT]]></title><description><![CDATA[<p>helferlein schrieb:</p>
<blockquote>
<p>einen std::string sowie bestimmte typen bekommen eine eigene behandlung.</p>
</blockquote>
<p>Und damit auch alle Typen, die einen std::string enthalten oder einen std::vector oder einen Typ mit Pimpl-Idiom. Mhhm. Nun wird auch nachträglich gepimlt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793055</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 15 Oct 2009 18:26:34 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Thu, 15 Oct 2009 19:18:59 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Und damit auch alle Typen, die einen std::string enthalten oder einen std::vector oder einen Typ mit Pimpl-Idiom.</p>
</blockquote>
<p>eben nicht.</p>
<p>jedes objekt serialisiert nur seine kinder, und auch nur die, die von einer<br />
gewissen klasse erben. das ganze lässt sich bis auf PODs runterbringen.</p>
<p>z.b.</p>
<pre><code class="language-cpp">class test : public Streamable
{
public:
    test() : integer(this), name(this) // registrieren
    {
        integer = 5;
        name = &quot;hallo&quot;;
    }

    StreamablePOD&lt;int&gt; integer;
    StreamablePOD&lt;std::string&gt; name; // std::string bekommt ne extrawurst (spezialisierung)
};

Streamable::RegisterClass(Allocator&lt;test&gt;());
Stream s;

test t;
t.Serialize(s);

test *pt = dynamic_cast&lt;test *&gt;(s.Deserialize());

assert(pt-&gt;integer == 5);
</code></pre>
<p>soweit funtzt es schon. stream rein und klasse raus.</p>
<p>ist darauf spezialisiert, eine komplette klassenhierachie mit all ihren<br />
verweisen, etc... laden zu können.</p>
<p>vector, string und die ganzen std::*'s bekommen ne eigene spezialisierung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793080</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Thu, 15 Oct 2009 19:18:59 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Thu, 15 Oct 2009 19:44:46 GMT]]></title><description><![CDATA[<p>helferlein schrieb:</p>
<blockquote>
<pre><code class="language-cpp">StreamablePOD&lt;std::string&gt; name; // std::string bekommt ne extrawurst
</code></pre>
</blockquote>
<p>Ah! Da hast Du also geschummelt. Ja, diesen Schummel mag ich.<br />
Der führt mich zu</p>
<pre><code class="language-cpp">class test:public SomeBase
{
public:
    test()
    :integer(5)
    ,name(hallo)
    {
    }
    test(istream&amp; in): SomeBase(in), integer(in), name(in)
    {
    }
    void save(ofstream&amp; out)
    {
       SomeBase::save(out);
       integer.save(out);
       name.save(out);
    }
private:
    StreamablePOD&lt;int&gt; integer;
    StreamablePOD&lt;std::string&gt; name;
};
REGISTERSTREAMABLE(test,SomeBase);
</code></pre>
<p>Der Leser macht dann</p>
<pre><code class="language-cpp">while(in&gt;&gt;name)
   ziel.push_back(macher[name].machEinen(in));
</code></pre>
<p>Der Schreiber macht</p>
<pre><code class="language-cpp">for each i in quelle
   datei&lt;&lt;i-&gt;getName()&lt;&lt;' ';
   i-&gt;save(datei);
</code></pre>
<p>oder so.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793099</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 15 Oct 2009 19:44:46 GMT</pubDate></item><item><title><![CDATA[Reply to delete mit zeiger anderen types? on Thu, 15 Oct 2009 20:54:44 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Ah! Da hast Du also geschummelt. Ja, diesen Schummel mag ich.</p>
</blockquote>
<p><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="😃"
    /> <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="😃"
    /> <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>
<p>es wird sogar noch lustiger:</p>
<p>da jede POD-klasse innerhalb der oberklasse ist, muss ich nur &quot;save&quot;<br />
für die oberste klasse aufrufen. der rest geht automatisch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>(innerhalb heißt. this &lt; POD &lt; this + 1)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1793119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1793119</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Thu, 15 Oct 2009 20:54:44 GMT</pubDate></item></channel></rss>