<?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[Template probleme]]></title><description><![CDATA[<p>Hallo ich folgendes Problem<br />
ich hab eine funktion die 2 string parameter hat<br />
nun möchte ich durch diese templateparameter festlegen<br />
dies funkteniert auch ganz gut bei einem<br />
bloß jetzt kommt das an dem ich scheidere<br />
ich hab genau 2 templateparameter die durch die strings festgelegt werden sollen<br />
um coderedundanz zu vermeiden und das programm leich zu erweitern würde ich gerne eine &quot;typ variable&quot; haben in die ich den typ speichern kann und später als templet argument übergeben kann</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243751/template-probleme</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 18:30:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243751.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Jun 2009 20:33:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 20:33:38 GMT]]></title><description><![CDATA[<p>Hallo ich folgendes Problem<br />
ich hab eine funktion die 2 string parameter hat<br />
nun möchte ich durch diese templateparameter festlegen<br />
dies funkteniert auch ganz gut bei einem<br />
bloß jetzt kommt das an dem ich scheidere<br />
ich hab genau 2 templateparameter die durch die strings festgelegt werden sollen<br />
um coderedundanz zu vermeiden und das programm leich zu erweitern würde ich gerne eine &quot;typ variable&quot; haben in die ich den typ speichern kann und später als templet argument übergeben kann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730210</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sat, 20 Jun 2009 20:33:38 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 20:43:44 GMT]]></title><description><![CDATA[<p>Zeig mal bitte Code, ich kann mir gar nix vorstellen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730217</guid><dc:creator><![CDATA[CODE!!!]]></dc:creator><pubDate>Sat, 20 Jun 2009 20:43:44 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 20:55:22 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">ReturnTyp* PSocketFactory::getSocket(std::string const &amp;String1)
{
 /* 
 hier soll der Typ des ersten argument ermitelt werden 
 in der art 
 if(&quot;Typ1&quot;==String1)
  { // hier soll in eine variable(typ1) der typ gespeichert werden}
*/

return new ReturnTyp&lt;typ1&gt;	
}
</code></pre>
<p>ist nur ein beispiel und stark vereinfacht<br />
es soll nur das problem dastellen<br />
und für die einrückung möchte ich mich jetzt auch scho einmal entschuldigen<br />
da ich diese code hier im forum geschrieben hab</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730221</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sat, 20 Jun 2009 20:55:22 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 21:03:27 GMT]]></title><description><![CDATA[<p>Und warum machst du aus getSocket nicht selber gleich ne Templatefunktion?</p>
<pre><code class="language-cpp">class PSocketFactory
{
 [...]
    template &lt; typename TYP1, typename TYP2 &gt;
    ReturnTyp* getSocket()
    {
        return new ReturnTyp&lt;TYP1, TYP2&gt;;
    }
};
[...]
PSocketFactory f;
ReturnTyp&lt;Peterchen, Mondfahrt&gt; * r = f.getSocket&lt;Peterchen, Mondfahrt&gt;();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1730223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730223</guid><dc:creator><![CDATA[Robbe]]></dc:creator><pubDate>Sat, 20 Jun 2009 21:03:27 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 21:09:19 GMT]]></title><description><![CDATA[<p>In der Template Programmierung ist diese if-Abfrage eine Spezialisierung.</p>
<pre><code class="language-cpp">template&lt;class T&gt;
void foo ( T t ){...}

//if T == int
template&lt;&gt;
void foo&lt;int&gt; ( int t ){...}

//if T == string
template&lt;&gt;
void foo&lt;string&gt; ( string t ){...}
</code></pre>
<p>Und die nicht spezialisierte Version (oberste) ist dann das &quot;else&quot;.</p>
<p>Aber ich habe eher das Gefühl, dass du Robbe's Lösung brauchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730228</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 20 Jun 2009 21:09:19 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 21:09:12 GMT]]></title><description><![CDATA[<p>ich möchte gerne die klassen die als templat argument übergeben werden vom anwender gekapselt sind und nur über die strings erreichbar sind<br />
was ich vll vergessen hab bzw falsch dargestelt hab<br />
ReturnTyp soll eine Basisklasse sein in der funktion soll dann eine abgeleitete klasse zurück gegeben. also AReturnTyp&lt;Typ1,Typ2&gt;<br />
oder stehe ich hier vor einem design fehler</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730229</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sat, 20 Jun 2009 21:09:12 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 21:17:00 GMT]]></title><description><![CDATA[<p>danke drakon dies ist mir zwar bewust nur das die klasse keine abhängikeiten von den template argumenten haben soll da hier keine intigrierten typen verwendet werden sonder selber geschriebene klassen und dies wäre keine alternative da bei bei zwei template argumente und für jedes jeweils 3 oder mehr möglichkeiten die anzahl an entsehenden möglichkeiten viel zu groß wäre und ich das durch einfache ifs auch hinbekommen würde<br />
robbes lösung ist wie oben geschrieben keine wirkliche alternative nach meinem design</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730233</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sat, 20 Jun 2009 21:17:00 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 21:44:31 GMT]]></title><description><![CDATA[<p>Also Spezialisierung funktioniert auch mit selbst definierten Typen..</p>
<p>Aber wenn ich dich richtig verstehe, dann willst du eher etwas, dass zur Laufzeit entscheidet und das geht mit templates nun mal nicht. Da brauchst du Laufzeitpolymorphie (abstrakte Basisklasse und dann die Typen davon ableiten).</p>
<pre><code class="language-cpp">// was abstraktes
class base_type
{...};

class type1 : public base_type {...};
class type2 : public base_type {...};

...

ReturnTyp* PSocketFactory::getSocket(std::string const &amp;String1)
{
 base_type b;

 if(&quot;Typ1&quot;==String1)
   b = new type1;
 else 
   b = new type2;

 return new ReturnTyp&lt;base_type&gt;   
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1730241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730241</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 20 Jun 2009 21:44:31 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 21:51:50 GMT]]></title><description><![CDATA[<p>@ 123:<br />
Bis auf ganz wenige Ausnahmen hast du durchgehend auf Satzzeichen verzichtet. Kombiniert mit deiner Formulierung finde ich es so sehr schwer, zu verstehen, was du eigentlich sagen willst. Bitte achte dich ein wenig darauf.</p>
<p>Aber ich habe auch das Gefühl, du vermischst Templates und Laufzeitpolymorphie. Wenn du das mit <code>if</code> -Abfragen zur Laufzeit lösen willst, warum machst du das nicht? Über virtuelle Funktionen solltest du je nach Typ andere Aktionen ausführen können. Da brauchst du nicht mal <code>if</code> s. Wenn du wirklich nicht mehr weiterweisst, gibt es auch noch <code>dynamic_cast</code> , wobei es hier wirklich nur wenige gerechtfertigte Anwendungsfälle gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730246</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 20 Jun 2009 21:51:50 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 22:13:51 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18422">@drakon</a> ich versteh deinen code nicht wirklich<br />
es wird ja immer die selbe klasse erstelt</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a> die klassen könne ja schon zur laufzeit fertig sein, also zur kompalierungszeit kann schon feststehen wie die klasse zusammen gesetzt ist.<br />
das mit den ifs will ich nicht machen, da dies bei zwei mal 3 möglichkeiten<br />
schon enorm viele Kombinationen sind, sowie die Wartbakeit darunter leiden muss und das hinzufügen einer weiteren Klasse nicht gerade einfach ist und mit enorm viel aufwand verbunden ist.</p>
<p>Da mein Problem extravagant ist möchte ich mal mein Problem allgemein erklären. Ich möchte eine Basisklasse haben von der Unterschiedliche Klassen abgeleitet werden. Diese Basisklasse soll mit einer zweiten Klasse die Benutzerschnitstelle darstellen. Die zweite klasse soll genau 3 parameter übernemen der erste soll die Unterklasse auswählen,<br />
der 2., sowie der 3. Parameter soll die eigenschaften von der ausgewählten klasse speziallisieren.<br />
deshalb dacht ich an templates da diese speziallisierung durch einfaches austauschen von klassen geschehen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730255</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sat, 20 Jun 2009 22:13:51 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 22:33:05 GMT]]></title><description><![CDATA[<p>123 schrieb:</p>
<blockquote>
<p>Die zweite klasse soll genau 3 parameter übernemen</p>
<p>der erste soll die Unterklasse auswählen,<br />
der 2., sowie der 3. Parameter soll die eigenschaften von der ausgewählten klasse speziallisieren.</p>
</blockquote>
<p>Hast du etwas in dieser Art gedacht?</p>
<pre><code class="language-cpp">template &lt;typename Unterklasse, typename Eigenschaft1, typename Eigenschaft2&gt;
ZweiteKlasse;
</code></pre>
<p>Was meinst du genau mit &quot;Eigenschaften&quot;? Soll in Abhängigkeit dieser Parameter ein grundsätzlich anderes Verhalten erzeugt werden? Da kannst du entweder verschiedene Klassen mit gleicher Schnittstelle als Template-Argumente übergeben. Oder wenn es nur kleine Dinge sind, eignen sich unter Umständen auch Funktionszeiger, allerdings als Funktions- statt Templateparameter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730265</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 20 Jun 2009 22:33:05 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 23:06:29 GMT]]></title><description><![CDATA[<p>so ähnlich.<br />
Hab an so was gedacht:</p>
<pre><code class="language-cpp">template &lt;class Eigenschaft1, class Eigenschaft2&gt;
Unterklasse1:Basis
{
...
Eigenschaft1 e1;
Eigenschaft2 e2;
};
</code></pre>
<p>ja durch die Parameter soll ein anders Verhalten erzeugt werden. Hierführ sollen unterschiedliche Klassen exesterien, die dieses über eine vordefinierte Schnitstelle erzeugen sollen.</p>
<p>Um eine benutzerfreundliche Schnitstelle zu erhalten und die Klassen gut zu Kapseln habe ich an eine Klasse gedacht die mir die entsprechende Klasse zusammenbastelt (ist glaub eine factory Klasse). Wie die Klasse aussehen soll, sollte durch die 3 Parameterfestgelegt werden</p>
<blockquote>
<p>Da kannst du entweder verschiedene Klassen mit gleicher Schnittstelle als Template-Argumente übergeben</p>
</blockquote>
<p>Dies ist ja das was ich erreichen will aber nicht hinbekomme</p>
<pre><code class="language-cpp">Basis* Erzeuger::getClass(string Klassentyp, string Eigenschaft1, string Eigenschaft2)
{
  //hier soll die Eigenschaftsklassen bestimmt werden und das ist mein Problem
  //sucht die Abgeleitete Klasse und gibt diese zurück
  return new Unterklasse1&lt;Eigenschaftsklasse1,Eigenschaftsklasse2&gt;;

}

//im code
Erzeuger erzeuger;
Basis* test = erzeuger.getClass(&quot;Unterklasse1&quot;,&quot;Eigenschaft1&quot;,&quot;Eigenschaft2&quot;);
</code></pre>
<p>vll wirds jetzt klar. Bei Vorschläge für ein anderes Design nur her damit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730279</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sat, 20 Jun 2009 23:06:29 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 23:16:29 GMT]]></title><description><![CDATA[<p>ich denk das ich das über Polymorphielösen werde<br />
indem ich entsprechende Klassen im ctor übergeben werde und mir die Laufzeitpolymorphie zunutzen mach, wobei mich das mit den Templates interressieren würde wie das geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730280</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sat, 20 Jun 2009 23:16:29 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 23:25:33 GMT]]></title><description><![CDATA[<p>In Modern C++ Design von Andrei Alexandrescu war glaub ich ein ähnliches Problem mit Lösung beschrieb. Leider hab ich das Buch zurzeit nicht mehr. Wenn es jemand hat kann er vll mal nachschaun ober er sowas in der Art findet.<br />
Würd mich wirklich interressieren.<br />
Noch ne frage wie stark ist der Performance verlust bei Laufzeitpolymorthie? Kann man das sagen bzw. welche größen spielen hier eine Rolle. Zwar kommt es in dieser Anwendung nicht unbeding auf Performance an aber es interressiert mich halt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730283</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sat, 20 Jun 2009 23:25:33 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 23:30:40 GMT]]></title><description><![CDATA[<p>123 schrieb:</p>
<blockquote>
<p>Dies ist ja das was ich erreichen will aber nicht hinbekomme</p>
</blockquote>
<p>So wie ich das sehe, brauchst du den ersten Template-Parameter, um eine neue Klasse zu erstellen und eindeutig zu identifizieren. Das ist aber unnötig, die Klasse ist schon durch die anderen Parameter genau definiert.</p>
<p>Ich hatte ungefähr sowas im Sinn:</p>
<pre><code class="language-cpp">template &lt;class Eigenschaft1, class Eigenschaft2&gt;
class Klasse
{
    Eigenschaft1 a;
    Eigenschaft2 b;

    void FunktionX()
    {
        a.TueDas();
        a.TueDies();
        b.TueDas();
    }

    void FunktionY()
    {
        b.TueNichts();
        b.BeginneEtwasZuTun();
    }
};
</code></pre>
<p>Wie du siehst, müssen die Klassen, die für die Template-Parameter <code>Eigenschaft1</code> und <code>Eigenschaft2</code> eine Schnittstelle erfüllen. <code>Eigenschaft1</code> erfordert die Methoden <code>TueDas()</code> und <code>TueDies()</code> , der Typ <code>Eigenschaft2</code> muss die Memberfunktionen <code>TueDas()</code> , <code>TueNichts()</code> und <code>BeginneEtwasZuTun()</code> bereitstellen.</p>
<p>Demzufolge kannst du alle Typen übergeben, die diese Anforderungen erfüllen und so deine Klassen leicht auswechseln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730287</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 20 Jun 2009 23:30:40 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sat, 20 Jun 2009 23:56:56 GMT]]></title><description><![CDATA[<p>Nexus danke für deine Bemühungen, aber<br />
ich glaub wier werden gerade aneinander vorbei.<br />
Bei mir ist nicht das Problem die Klasse, die ich erstellen will<br />
und wie ich die Templates einsetzen muss<br />
das Problem liegt in der <strong>Erzeugerklasse</strong>, die aus den Parametern die Klasse zusammen basteln soll.<br />
Dies ist mein Ziel:</p>
<pre><code class="language-cpp">...
Erzeuger erzeuger;
Basis* test = erzeuger.getClass(&quot;Unterklasse1&quot;,&quot;Eigenschaft1&quot;,&quot;Eigenschaft2&quot;); 
//die zu erzeugende Klasse soll so aussehen //Unterklasse1&lt;Eigenschaft1,Eigenschaft2&gt;
Basis* test1 = erzeuger.getClass(&quot;Unterklasse2&quot;,&quot;Eigenschaft1&quot;,&quot;Eigenschaft2&quot;);
//die zu erzeugende Klasse soll so aussehen //Unterklasse2&lt;Eigenschaft1,Eigenschaft2&gt;
...
</code></pre>
<p>Der erste Parameter ist genauso Wichtig wie die andern beiden Parameter, da dieser die entsprechende Unterklasse ausgewählt wird.</p>
<blockquote>
<p>Demzufolge kannst du alle Typen übergeben, die diese Anforderungen erfüllen und so deine Klassen leicht auswechseln.</p>
</blockquote>
<p>Ich will die Typen &quot;übergeben lasse&quot;, also von der Erzeuger Klasse<br />
ich will sowas verhindern</p>
<pre><code class="language-cpp">Basis* Erzeuger::getClass(string Klassentyp, string Eigenschaft1, string Eigenschaft2)
{

  if(Klassentyp==&quot;Unterklasse1&quot;)
   {
    if(Eigenschaft1==&quot;Eigenschaft1&quot;)
    {
     if(Eigenschaft2==&quot;Eigenschaft2&quot;)
     {
      return new Unterklasse1&lt;Eigenschaftsklasse1,Eigenschaftsklasse2&gt;;
     }
     if(Eigenschaft2==&quot;Eigenschaft2X&quot;)
     {
      return new Unterklasse1&lt;Eigenschaftsklasse1,Eigenschaftsklasse2X&gt;;
     }
    }
    if(Eigenschaft1==&quot;Eigenschaft1X&quot;)
    {
     if(Eigenschaft2==&quot;Eigenschaft2&quot;)
     {
      return new Unterklasse1&lt;Eigenschaftsklasse1X,Eigenschaftsklasse2&gt;;
     }
     if(Eigenschaft2==&quot;Eigenschaft2X&quot;)
     {
      return new Unterklasse1&lt;Eigenschaftsklasse1X,Eigenschaftsklasse2X&gt;;
     }
    }

}
</code></pre>
<p>Wie man sehen kann ist hier sehr viel Coderedundanz enthalten, macht dies Unwartbar bei allein einer Unterklasse und zu jedem Template eine auswahl von zwie verschieden Argumenten</p>
<p>Es geht also nicht um die von dier vorgestellte Klasse. Diese stelt für mich so kein Problem da</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730291</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sat, 20 Jun 2009 23:56:56 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sun, 21 Jun 2009 00:51:26 GMT]]></title><description><![CDATA[<p>Sorry, aber ich glaube, jetzt habe ich es ein wenig besser verstanden. Du hast ja vorhin Folgendes geschrieben:</p>
<p>123 schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a> die klassen könne ja schon zur laufzeit fertig sein, also zur kompalierungszeit kann schon feststehen wie die klasse zusammen gesetzt ist.</p>
</blockquote>
<p>Wie sieht das nun aus? Sind die Typen zur Kompilierzeit bekannt? Falls ja, kannst du das nicht über Strings machen, sondern musst konstante Ausdrücke wie <code>enum</code> s verwenden. Dann stellt sich allerdings wieder die Frage, wieso überhaupt ein Mapping notwendig ist und nicht gleich der richtige Typ eingesetzt werden kann (indem man <code>getClass()</code> zu einem Funktionstemplate macht).</p>
<p>Ansonsten muss man eine völlig andere - und wohl eher unflexible - Herangehensweise wählen. Das Problem ist, dass man keine Typen zur Laufzeit speichern kann. Wenn du den Typ also nicht zur Kompilierzeit weisst, musst du eine Fallunterscheidung mit <code>if</code> machen (oder evtl. <code>switch</code> ). Mir fallen im Moment nur gerade Makros ein, die die Codeduplizierung verringern könnten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730303</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 21 Jun 2009 00:51:26 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sun, 21 Jun 2009 01:35:52 GMT]]></title><description><![CDATA[<p>Hier eine Methode zur Laufzeit, zwar auch mit Templates, die aber nicht vom String direkt abhängen. Am besten, du versuchst, das Ganze von unten her nachzuvollziehen.</p>
<pre><code class="language-cpp">template &lt;typename TX, typename TY, typename TZ&gt;
Basis* MapType()
{
	return new Klasse&lt;TX, TY, TZ&gt;();
}

template &lt;typename TX, typename TY&gt;
Basis* MapType(const std::string&amp; StringZ)
{
	if (StringZ == &quot;schnelles Z&quot;)				
	{									
		return MapType&lt;TX, TY, SchnellZ&gt;();	
	}									
	else if (StringZ == &quot;langsames Z&quot;)		
	{
		return MapType&lt;TX, TY, LangsamZ&gt;();
	}
}

template &lt;typename TX&gt;
Basis* MapType(const std::string&amp; StringY, const std::string&amp; StringZ)
{
	if (StringY == &quot;rotes Y&quot;)	
	{									
		return MapType&lt;TX, RotY&gt;(StringZ);
	}									
	else if (StringY == &quot;blaues Y&quot;)
	{							
		return MapType&lt;TX, BlauY&gt;(StringZ);		
	}							
	else if (StringY == &quot;gelbes Y&quot;)
	{									
		return MapType&lt;TX, GelbY&gt;(StringZ);
	}
}

Basis* MapType(const std::string&amp; StringX, const std::string&amp; StringY, const std::string&amp; StringZ)
{	
	if (StringX == &quot;einfaches X&quot;)				
	{									
		return MapType&lt;EinfachX&gt;(StringY, StringZ);		
	}									
	else if (StringX == &quot;schwieriges X&quot;)		
	{									
		return MapType&lt;SchwierigX&gt;(StringY, StringZ);	
	}
}
</code></pre>
<p>Das Problem momentan ist, dass du immer noch relativ viel ändern musst, wenn eine vierte Klasse (neben X, Y und Z) dazukommt. Mit Präprozessormagie könnte man sicher noch einige Dinge flexibler machen. Aber mit meinem oberen Code hast du wenigstens jede Abfrage nur einmal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730309</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 21 Jun 2009 01:35:52 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sun, 21 Jun 2009 10:24:52 GMT]]></title><description><![CDATA[<p>leider auch nicht ganz das was ich suche.<br />
denk ich muss das über die Pholymorthie machen<br />
und es zur laufzeit entscheiden,<br />
dann muss der ctor halt zwei Zeiger übernehmen, für jede eigenschaft einen,<br />
das sollte dann funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730396</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sun, 21 Jun 2009 10:24:52 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sun, 21 Jun 2009 10:48:11 GMT]]></title><description><![CDATA[<p>123 schrieb:</p>
<blockquote>
<p>leider auch nicht ganz das was ich suche.<br />
denk ich muss das über die Pholymorthie machen<br />
und es zur laufzeit entscheiden,<br />
dann muss der ctor halt zwei Zeiger übernehmen, für jede eigenschaft einen,<br />
das sollte dann funktionieren.</p>
</blockquote>
<p>Dann bist du aber in etwa dort, was ich bereits vorgeschlagen habe, nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730403</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 21 Jun 2009 10:48:11 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sun, 21 Jun 2009 11:18:27 GMT]]></title><description><![CDATA[<p>naja so ähnlich.</p>
<p>Die strings werden in der erzeuger klasse zu der entsprechenden Klasse aufgelöst.<br />
Die übergeb ich dann dem Konstruktor<br />
spricht das was ich über templates zur kompiler zeit machen wollte mach ich jetzt mit Polymorthie zur laufzeit<br />
ich versuchs jetzt mal umzusetzen und wenns tut kann ich ja mal posten</p>
<p>hab mir deins noch mal angeschaut.<br />
Erfüllt zwar doch die aufgabe die ich lösen wollte, bloß schaut das, naja<br />
nicht so übersichtlich aus. Ich muss dann halt mit der Laufzeitpolyorthie leben.<br />
Dafür sollte der Quellcode lesbarer sein und einen geringeren overhead sollte dies auch erzeugen wobei ich mir hier nicht sicher bin.<br />
Bei der Template Methode wird dann doch zur Kompailerzeit jede denkbare klasse die sich ergeben könnte erstelt also jede kombination?</p>
<p>aber noch mals danke<br />
auf die Lösung wär ich von alleine glaub nicht gekommen (Template)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730421</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sun, 21 Jun 2009 11:18:27 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sun, 21 Jun 2009 11:36:21 GMT]]></title><description><![CDATA[<p>Ich weiss jetzt nicht genau, welche Lösung du meinst, aber ja templates erzeugen mehr Code, allerdings ohne Nachteile zur Laufzeit. Die Laufzeitpolymorphie ist wessentlich flexibler, jedoch hat es Nachteile in der Geschwindigkeit zur Laufzeit. (jedoch sollten diese Aspekte vernachlässigt werden und eher auf das Problem, welches du lösen willst ausgerichtet sein).</p>
<blockquote>
<p>Bei der Template Methode wird dann doch zur Kompailerzeit jede denkbare klasse die sich ergeben könnte erstelt also jede kombination?</p>
</blockquote>
<p>Wenn nötig ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730426</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 21 Jun 2009 11:36:21 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sun, 21 Jun 2009 12:12:09 GMT]]></title><description><![CDATA[<p>hab mir jetzt sowas vorgestellt</p>
<pre><code class="language-cpp">Basis
{
 virtual void doSomething();
 //...
}

Unterklasse1:Basis
{
 //...
 Unterklasse1(Eigenschaft1*,Eigenschaft2*);
 void doSomething();
 //...
 Eigenschaft1* e1;
 Eigenschaft2* e2;
}

Baisi* Erzeuger::getClass(string Klasse,sting eigenschaft1, string eigenschaft2)
{
 Eigenschaft1* e1=NULL;
 Eigenschaft1* e2=NULL;
 //...
 else if(eigenschaft1==&quot;Eigenschaft1X&quot;) e1=new Eigenschaft1X;
 //...
 else if (eigenschaft2==&quot;Eigenschaft2X&quot;) e2=new Eigenschaft2X;
 //...
 else if (Klasse==&quot;UnterKlasse1&quot;) return Unterklasse1(e1,e2);
 //...
}

//Eigenschaften1X ist von Eigenschaften1 abgeleitet
</code></pre>
<p>Das was ich hier jetzt über die Polymorthie gemacht hab war am anfang mein ziel durch Tamplets zu machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730447</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sun, 21 Jun 2009 12:12:09 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sun, 21 Jun 2009 12:48:04 GMT]]></title><description><![CDATA[<p>123 schrieb:</p>
<blockquote>
<p>leider auch nicht ganz das was ich suche.<br />
denk ich muss das über die Pholymorthie machen</p>
</blockquote>
<p>Ich habe ja extra gesagt, dass mein Code zur Laufzeit funktioniert. Die Funktionstemplates dienen nur zur Verhinderung der Codeduplizierung.</p>
<p>Wo liegt also das Problem?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730464</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 21 Jun 2009 12:48:04 GMT</pubDate></item><item><title><![CDATA[Reply to Template probleme on Sun, 21 Jun 2009 13:15:14 GMT]]></title><description><![CDATA[<p>nirgends <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 />
ich implementier beide Möglichkeiten mal und untersuch dan mal das Laufzeitverhalten (Geschwindigkeit etc.) und Größe, wobei größe heute weniger das Problem ist.<br />
Kennst du einen guten Profiler auser CodeAnalyst von AMD der auch gut auf Intel Prozesoren funktioniert. Sollte aber kostenlos sein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730483</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sun, 21 Jun 2009 13:15:14 GMT</pubDate></item></channel></rss>