<?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[Klassenattribute in Bytearray speichern]]></title><description><![CDATA[<p>Ich habe eine Situation, in der ich die Attribute einer Klasse in einen einfachen Array aus Bytes speichern möchte, aber es handelt sich nicht um POD.<br />
Beispiel:</p>
<pre><code class="language-cpp">struct Attributes {
    int attr1;
    char attr2;
    std::deque &lt;char&gt; attr3;
};

class A {
private:
    Attributes Attr;
public:
    Attributes GetAttributes() const;  // gibt Attr zurück
};

int main () {
    const unsigned short SIZE = /* something */
    char Buffer[SIZE];
    A Instance;
    // Hier Konvertierung | Instance.GetAttributes() -&gt; Buffer
}
</code></pre>
<p>Ich würde ungern jedes einzelne Element hinzufügen, da ich jetzt schon weiß, dass ich die Attribute um Elemente erweitern werde und wenn ich dann mal vergesse die Funktion für die Konvertierung zu erweitern...<br />
Kann ich es denn sinnvoll anders machen?</p>
<p>EDIT: Ich glaube nicht, dass reinterpret_cast und memcpy mich weiterbringen... oder?</p>
<p>EDIT 2: Ich vergaß zu sagen, dass es auch rückwärts wieder laufen muss <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/302181/klassenattribute-in-bytearray-speichern</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 18:55:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302181.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Apr 2012 18:50:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassenattribute in Bytearray speichern on Thu, 12 Apr 2012 19:00:20 GMT]]></title><description><![CDATA[<p>Ich habe eine Situation, in der ich die Attribute einer Klasse in einen einfachen Array aus Bytes speichern möchte, aber es handelt sich nicht um POD.<br />
Beispiel:</p>
<pre><code class="language-cpp">struct Attributes {
    int attr1;
    char attr2;
    std::deque &lt;char&gt; attr3;
};

class A {
private:
    Attributes Attr;
public:
    Attributes GetAttributes() const;  // gibt Attr zurück
};

int main () {
    const unsigned short SIZE = /* something */
    char Buffer[SIZE];
    A Instance;
    // Hier Konvertierung | Instance.GetAttributes() -&gt; Buffer
}
</code></pre>
<p>Ich würde ungern jedes einzelne Element hinzufügen, da ich jetzt schon weiß, dass ich die Attribute um Elemente erweitern werde und wenn ich dann mal vergesse die Funktion für die Konvertierung zu erweitern...<br />
Kann ich es denn sinnvoll anders machen?</p>
<p>EDIT: Ich glaube nicht, dass reinterpret_cast und memcpy mich weiterbringen... oder?</p>
<p>EDIT 2: Ich vergaß zu sagen, dass es auch rückwärts wieder laufen muss <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2201286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201286</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Thu, 12 Apr 2012 19:00:20 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenattribute in Bytearray speichern on Thu, 12 Apr 2012 19:08:11 GMT]]></title><description><![CDATA[<p>Na ja. Wie genau meinst du das? memcpy drüber und fertig funktioniert natürlich, allerdings hast du dann im Puffer statt den Elementen der deque nur ein paar Pointer stehen. Ich glaube das ist nicht das, was du willst. Insofern würde ich sagen ja, du musst dir für jeden Typ ein Layout überlegen, und dafür Ein- und Ausgabeoperationen zur verfügung stellen. Die Nutzung davon ist dann auch ganz hübsch, weil ja einfach die richtige Überladung genommen wird. Diese Funktionen allerdings sind wohl nicht besonders hübsch - und du musst das halt wirklich für jeden Typ einzeln implementieren. (Bei Templates natürlich über Templates.)</p>
<p>Ansonsten kann ich diese Seite empfehlen, ich glaube, das ist das was du willst: <a href="http://www.parashift.com/c++-faq-lite/serialization.html" rel="nofollow">http://www.parashift.com/c++-faq-lite/serialization.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201289</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 12 Apr 2012 19:08:11 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenattribute in Bytearray speichern on Thu, 12 Apr 2012 19:21:26 GMT]]></title><description><![CDATA[<p>Das ganze lieber als Elementfunktion oder als nicht befreundete Nichtelement-funktion?<br />
(Also angenommen ich bastele eine Funktion serialize(/* const Attributes&amp; Obj */))</p>
<p>Und du hast recht, Zeiger würden mir nicht helfen :), da das ganze über einen Socket raus geht und irgendwo anders wieder zurückgebastelt wird. Ich denke ich packe die Sachen in einen Stream (binary).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201295</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Thu, 12 Apr 2012 19:21:26 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenattribute in Bytearray speichern on Thu, 12 Apr 2012 20:30:44 GMT]]></title><description><![CDATA[<p>Hm.. schwer zu sagen. Es gehört irgendwie nicht so richtig zum Interface einer Klasse. Andererseits, sobald Vererbung im Spiel ist, wird das nervig mit freien Funktionen. Insofern würde ich jetzt zu Methoden tendieren, aber so ganz sicher bin ich mir da nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2201329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2201329</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 12 Apr 2012 20:30:44 GMT</pubDate></item></channel></rss>