<?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[Erben von einem templatisierten Objekt]]></title><description><![CDATA[<p>Moin,</p>
<p>Hoff ich habs richtig beschrieben.</p>
<p>Habe momentan folgenden Code:</p>
<pre><code>template &lt;class T&gt;
class structtemplatetest : public clBaseSegment, public  T{

};

typedef struct irgendwas{
char eins[5];
char zwei[5];
char drei[5];
}irgendwas;

class tester : public structtemplatetest&lt;irgendwas&gt;{
   public:
	tester(){};
};
</code></pre>
<p>Läuft auch soweit, auf <strong>eins</strong>, <strong>zwei</strong> und <strong>drei</strong> kann ich einzeln prima zugreifen.</p>
<p>Jetzt würde ich aber gerne das struct als ganzes füllen, z.B. mit einem char array das ich dem Konstruktor mitgebe.</p>
<p>Geht das überhaupt?</p>
<p>Grüße<br />
Sharkbyte</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/313171/erben-von-einem-templatisierten-objekt</link><generator>RSS for Node</generator><lastBuildDate>Sun, 02 Aug 2026 07:49:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/313171.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Jan 2013 14:53:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Erben von einem templatisierten Objekt on Wed, 23 Jan 2013 14:53:14 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p>Hoff ich habs richtig beschrieben.</p>
<p>Habe momentan folgenden Code:</p>
<pre><code>template &lt;class T&gt;
class structtemplatetest : public clBaseSegment, public  T{

};

typedef struct irgendwas{
char eins[5];
char zwei[5];
char drei[5];
}irgendwas;

class tester : public structtemplatetest&lt;irgendwas&gt;{
   public:
	tester(){};
};
</code></pre>
<p>Läuft auch soweit, auf <strong>eins</strong>, <strong>zwei</strong> und <strong>drei</strong> kann ich einzeln prima zugreifen.</p>
<p>Jetzt würde ich aber gerne das struct als ganzes füllen, z.B. mit einem char array das ich dem Konstruktor mitgebe.</p>
<p>Geht das überhaupt?</p>
<p>Grüße<br />
Sharkbyte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2292643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2292643</guid><dc:creator><![CDATA[Sharkbyte]]></dc:creator><pubDate>Wed, 23 Jan 2013 14:53:14 GMT</pubDate></item><item><title><![CDATA[Reply to Erben von einem templatisierten Objekt on Wed, 23 Jan 2013 14:55:42 GMT]]></title><description><![CDATA[<p>Müsste gehen. Auch wenn nicht gerade schön und sauber. Keine Ahnung ob es in jedem Compiler glücklich ausgeht:</p>
<pre><code class="language-cpp">tester::tester() {
    std::memset(eins, 0, sizeof(eins) + sizeof(zwei) + sizeof(drei));
}
</code></pre>
<p>Bei bedarf durcc <code>std::memcpy</code> o. ä. ersetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2292647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2292647</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Wed, 23 Jan 2013 14:55:42 GMT</pubDate></item><item><title><![CDATA[Reply to Erben von einem templatisierten Objekt on Wed, 23 Jan 2013 15:28:46 GMT]]></title><description><![CDATA[<p>Thx <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>Kann mir vielleicht noch jemand sagen unter welchen Stichworten ich mehr Infos hierfür finden könnte?</p>
<p>Unter &quot;Inherit template&quot; finde ich verständlicherweise nichts :&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2292666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2292666</guid><dc:creator><![CDATA[Sharkbyte]]></dc:creator><pubDate>Wed, 23 Jan 2013 15:28:46 GMT</pubDate></item><item><title><![CDATA[Reply to Erben von einem templatisierten Objekt on Wed, 23 Jan 2013 15:42:28 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20378">@theliquidwave</a> Das ist nicht standardkonform.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/28082">@Sharkbyte</a> Wo hat dein Problem überhaupt irgendetwas mit Vererbung zu tun? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> &quot;Das struct als ganzes füllen&quot; geht so leider nicht. Der Compiler kann hier nach belieben Padding einbauen. Es ginge höchstens, wenn du vorher auch aus so einem struct die Daten in ein char Array kopiert hättest, und sie jetzt wieder zurückkopierst. Aber was soll das überhaupt sein? Ein struct mit 3-char arrays wirkt auf den ersten Blick erstmal.. sinnlos. <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="😉"
    /><br />
PS: Deine Basis-Klassen haben einen virtuellen Destruktor?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2292674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2292674</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Wed, 23 Jan 2013 15:42:28 GMT</pubDate></item><item><title><![CDATA[Reply to Erben von einem templatisierten Objekt on Wed, 23 Jan 2013 17:39:36 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20378">@theliquidwave</a> Das ist nicht standardkonform.</p>
</blockquote>
<p>Aber man kann es standardkonform machen.</p>
<pre><code class="language-cpp">std::memset(static_cast&lt;irgendwas*&gt;(this), 0, sizeof(struct irgendwas));
</code></pre>
<p>(oder so in der Art, will das jetzt nicht testen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2292727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2292727</guid><dc:creator><![CDATA[conforama]]></dc:creator><pubDate>Wed, 23 Jan 2013 17:39:36 GMT</pubDate></item><item><title><![CDATA[Reply to Erben von einem templatisierten Objekt on Wed, 23 Jan 2013 17:40:25 GMT]]></title><description><![CDATA[<p>Wenn dann reinterpret_cast</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2292728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2292728</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Wed, 23 Jan 2013 17:40:25 GMT</pubDate></item><item><title><![CDATA[Reply to Erben von einem templatisierten Objekt on Wed, 23 Jan 2013 17:41:56 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Wenn dann reinterpret_cast</p>
</blockquote>
<p>Wie das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2292729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2292729</guid><dc:creator><![CDATA[conforama]]></dc:creator><pubDate>Wed, 23 Jan 2013 17:41:56 GMT</pubDate></item><item><title><![CDATA[Reply to Erben von einem templatisierten Objekt on Wed, 23 Jan 2013 18:45:22 GMT]]></title><description><![CDATA[<p>conforama schrieb:</p>
<blockquote>
<p>cooky451 schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20378">@theliquidwave</a> Das ist nicht standardkonform.</p>
</blockquote>
<p>Aber man kann es standardkonform machen.</p>
</blockquote>
<p>Nur wenn jeder Member separat initialisiert wird.</p>
<p>conforama schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::memset(static_cast&lt;irgendwas*&gt;(this), 0, sizeof(struct irgendwas));
</code></pre>
<p>(oder so in der Art, will das jetzt nicht testen)</p>
</blockquote>
<p>So geht es jedenfalls nicht. memcpy&amp;co. können nur auf nicht-Basisklassenobjekte angewendet werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2292747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2292747</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 23 Jan 2013 18:45:22 GMT</pubDate></item><item><title><![CDATA[Reply to Erben von einem templatisierten Objekt on Fri, 25 Jan 2013 13:23:40 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Es ginge höchstens, wenn du vorher auch aus so einem struct die Daten in ein char Array kopiert hättest, und sie jetzt wieder zurückkopierst. Aber was soll das überhaupt sein? Ein struct mit 3-char arrays wirkt auf den ersten Blick erstmal.. sinnlos. <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>Hiho,</p>
<p>Das Struct hat jeweils um die 30-40 char arrays und davon gibt es historisch bedingt in diesem Projekt eine Menge.</p>
<p>Und ja, Ausgangssituation ist, ich kopiere den Inhalt eines solchen Structs, schick die Zeichenkette über ein Telegramm an einen anderen Prozess um ihn dort wieder in das gleiche struct zu schieben.</p>
<p>Es ist jetzt aber doch so wie du sagtest, beim Erstellen und Initialisieren der Klasse wird das char array nicht ganz korrekt drüber gelegt.<br />
Kann man das irgendwie lösen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293358</guid><dc:creator><![CDATA[Sharkbyte]]></dc:creator><pubDate>Fri, 25 Jan 2013 13:23:40 GMT</pubDate></item><item><title><![CDATA[Reply to Erben von einem templatisierten Objekt on Fri, 25 Jan 2013 13:44:38 GMT]]></title><description><![CDATA[<p>Gerade hat sichs gelöst.</p>
<p>Aber zum Thema Destruktor, muss ich die char Arrays einzeln löschen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293365</guid><dc:creator><![CDATA[Sharkbyte]]></dc:creator><pubDate>Fri, 25 Jan 2013 13:44:38 GMT</pubDate></item><item><title><![CDATA[Reply to Erben von einem templatisierten Objekt on Fri, 25 Jan 2013 13:54:15 GMT]]></title><description><![CDATA[<p>Sharkbyte schrieb:</p>
<blockquote>
<p>Aber zum Thema Destruktor, muss ich die char Arrays einzeln löschen?</p>
</blockquote>
<p>Nein, du musst nur Speicher mit <code>delete</code> freigeben, den du mit <code>new</code> angefordert hast und selbst verwaltest. Dank RAII kommt dieser Fall idealerweise recht selten vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293367</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 25 Jan 2013 13:54:15 GMT</pubDate></item><item><title><![CDATA[Reply to Erben von einem templatisierten Objekt on Fri, 25 Jan 2013 14:57:18 GMT]]></title><description><![CDATA[<p>Sharkbyte schrieb:</p>
<blockquote>
<p>Es ist jetzt aber doch so wie du sagtest, beim Erstellen und Initialisieren der Klasse wird das char array nicht ganz korrekt drüber gelegt.<br />
Kann man das irgendwie lösen?</p>
</blockquote>
<p>Vielleicht so:</p>
<pre><code>class tester : public structtemplatetest&lt; irgendwas &gt;
{
public:
    tester( const char* s )
    {
        assert( s );
        typedef std::char_traits&lt; char &gt; Traits;
        std::size_t len = Traits::length( s ) + 1; // + 1 wg. char(=) am Ende

        std::size_t l = std::min(sizeof(eins), len);
        Traits::copy( eins, s, l );
        if( (len -= l) == 0 )
            return;
        s += l;

        l = std::min(sizeof(zwei), len);
        Traits::copy( zwei, s, l );
        if( (len -= l) == 0 )
            return;
        s += l;

        l = std::min(sizeof(drei), len);
        Traits::copy( drei, s, l );
        if( (len -= l) == 0 )
            return;
        s += l;

        std::cerr &lt;&lt; &quot;Rest: [&quot; &lt;&lt; s &lt;&lt; &quot;] konnte nicht uebernommen werden&quot; &lt;&lt; std::endl;
    }
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2293386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293386</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Fri, 25 Jan 2013 14:57:18 GMT</pubDate></item><item><title><![CDATA[Reply to Erben von einem templatisierten Objekt on Fri, 25 Jan 2013 16:27:36 GMT]]></title><description><![CDATA[<p>Sharkbyte schrieb:</p>
<blockquote>
<p>Jetzt würde ich aber gerne das struct als ganzes füllen, z.B. mit einem char array das ich dem Konstruktor mitgebe.</p>
</blockquote>
<p>Du kannst das struct als ganzes füllen, indem du einfach den (automatisch generierten) Zuweisungsoperator verwendest.<br />
Bzw. du könntest &quot;structtemplatetest&quot; auch einen entsprechenden Konstruktor verpassen, so dass &quot;irgendwas&quot; gleich in der Initializer-Liste initialisiert wird.</p>
<p>So in der Art:<br />
<a href="http://ideone.com/5ftTxL" rel="nofollow">http://ideone.com/5ftTxL</a></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

struct clBaseSegment {};

template &lt;class T&gt; 
class structtemplatetest : public clBaseSegment, public  T{ 

}; 

typedef struct irgendwas{ 
char eins[5]; 
char zwei[5]; 
char drei[5]; 
}irgendwas; 

class tester : public structtemplatetest&lt;irgendwas&gt;{ 
    public: 
     tester(irgendwas const&amp; iw)
     {
        *static_cast&lt;irgendwas*&gt;(this) = iw;
     }; 
};

int main()
{
    irgendwas iw;
    iw.eins[0] = 'a';
    iw.zwei[0] = 'b';
    iw.drei[0] = 'c';
    tester tt(iw);
    std::cout &lt;&lt; tt.eins[0] &lt;&lt; &quot; &quot; &lt;&lt; tt.zwei[0] &lt;&lt; &quot; &quot; &lt;&lt; tt.drei[0] &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>Das Problem reduziert sich auf jeden Fall darauf irgendwie &quot;irgendwas&quot; &quot;am Stück&quot; zu initialisieren/zuzuweisen. Dass hierbei vererbt wird und Templates im Spiel sind macht keinen Unterschied.</p>
<p>Falls das nicht das ist was du willst bitte beschreib nochmal genauer wie du das &quot;irgendwas&quot; Struct initialisieren/zuweisen willst.</p>
<p>ps: der ; am Ende des &quot;tester&quot; Konstruktors ist natürlich überflüssig - ich hab den einfach doof mitkopiert, fällt mir erst jetzt auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2293416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2293416</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 25 Jan 2013 16:27:36 GMT</pubDate></item></channel></rss>