<?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 Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen]]></title><description><![CDATA[<p>Hallo zusammen!<br />
Ich habe mal wieder eine Frage :).</p>
<p>Es besteht folgende (minimierte) Problematik:<br />
---------------------------------------------------------------------------<br />
Die Template-Funktion:<br />
...<br />
template &lt;class T1 , class T2&gt;<br />
void dieFunktion(T1 wert)<br />
{<br />
T2 a = new T2(wert);<br />
}</p>
<p>Der ausführende Code (z.B. mit bool)<br />
...<br />
dieFunktion&lt; bool , KlasseX &gt; ( true );</p>
<p>(Läuft nicht)<br />
---------------------------------------------------------------------------<br />
Normalerweise kann man sich die spitzen Klammern ja sparen, wenn durch die Parameter der Funktion klar ist, um welche Typen es sich handelt.</p>
<p>Die Fragestellung ist also: Wie ist bitte der Syntax um Template Platzhalter zu verwenden, die nicht durch einen Parameter der Funktion definiert werden?</p>
<p>Beste Grüße,<br />
Oliver</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268288/template-funktion-defintion-der-typen-ohne-dass-sie-in-den-parametern-auftauchen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 00:14:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268288.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 Jun 2010 07:43:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 07:43:01 GMT]]></title><description><![CDATA[<p>Hallo zusammen!<br />
Ich habe mal wieder eine Frage :).</p>
<p>Es besteht folgende (minimierte) Problematik:<br />
---------------------------------------------------------------------------<br />
Die Template-Funktion:<br />
...<br />
template &lt;class T1 , class T2&gt;<br />
void dieFunktion(T1 wert)<br />
{<br />
T2 a = new T2(wert);<br />
}</p>
<p>Der ausführende Code (z.B. mit bool)<br />
...<br />
dieFunktion&lt; bool , KlasseX &gt; ( true );</p>
<p>(Läuft nicht)<br />
---------------------------------------------------------------------------<br />
Normalerweise kann man sich die spitzen Klammern ja sparen, wenn durch die Parameter der Funktion klar ist, um welche Typen es sich handelt.</p>
<p>Die Fragestellung ist also: Wie ist bitte der Syntax um Template Platzhalter zu verwenden, die nicht durch einen Parameter der Funktion definiert werden?</p>
<p>Beste Grüße,<br />
Oliver</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908137</guid><dc:creator><![CDATA[Olli85]]></dc:creator><pubDate>Mon, 07 Jun 2010 07:43:01 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 07:49:40 GMT]]></title><description><![CDATA[<p>Doch, das ist richtig. Wenn du mehr sagen würdest als &quot;läuft nicht&quot; könnte man dir sogar helfen.</p>
<p>Einen Fehler kann man sogar sofort sehen:</p>
<pre><code class="language-cpp">T2 a = new T2(wert);
</code></pre>
<p>Dies kann nur in Ausnahmenfällen funktionieren, da new einen T2* zurückgibt, welcher im Allgemeinen nicht kompatibel zu einem T2 sein wird. Das sollte dir dein Compiler aber auch eigentlich sagen, wenn das Template instanziert wird (und das wird es in deinem Beispiel).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908140</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 07 Jun 2010 07:49:40 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 07:48:12 GMT]]></title><description><![CDATA[<p>nenn die template-parameter, die aus den parametern geschlossen werden können, als letzte in der liste. dann kannst du sie weglassen beim konkreten aufruf. falls ich dein problem jetzt richtig verstanden habe.</p>
<p>ru,<br />
cirion</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908141</guid><dc:creator><![CDATA[cirion]]></dc:creator><pubDate>Mon, 07 Jun 2010 07:48:12 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 08:09:10 GMT]]></title><description><![CDATA[<p>Hehe .. &quot;T2 a = new T2(wert);&quot; spielt keine Rolle sorry. Das entstammt nicht dem Quellcode, sondern meinem minimierten Beispiel hier.</p>
<p>(Vielen Dank für die schnellen Reaktionen übrigens)</p>
<p>Ich mache nochmal ein Beispiel, evtl. wird deutlicher was ich meine.</p>
<p>-- Beispiel 1 - läuft ------------------------------</p>
<p>Die Funktion:</p>
<p>template &lt;class T1&gt;<br />
void dieFunktion(T1 wert)<br />
{<br />
//Mache irgendwas mit wert<br />
}</p>
<p>Aufruf der Funktion:</p>
<p>dieFunktion(IrgendEinWert);<br />
******************************************************<br />
Hier ist alles ohne Probleme! T1 wird definiert durch die Übergabe des Parameters der Funktion.<br />
Alternativ hätte ich die Funktion auch wie folgt aufrufen können (z.B. für bool):</p>
<p>dieFunktion&lt;bool&gt;(IrgendeinBoolscherWert).</p>
<p>Das läuft auch!</p>
<p>-- Beispiel 2 - läuft nicht --------------------------</p>
<p>Die Funktion:</p>
<p>template &lt;class T1, class T2&gt;<br />
void dieFunktion(T1 wert)<br />
{<br />
//Mache irgendwas mit (T1)wert und irgendwas mit dem Typ T2<br />
}</p>
<p>Aufruf der Funktion:<br />
dieFunktion(IrgendEinWert); // DAS GEHT JA NICHT MEHR! Weil T2 damit nicht definiert ist.</p>
<p>Also mache ich den Aufruf wie folgt (z.B. für bool):</p>
<p>dieFunktion &lt; bool , IrgendeineKlasse &gt; (IrgendEinWertBoolscherWert);</p>
<p>------------------------------------------------------</p>
<p>Der Compiler bemängelt hier, dass er keine Übereinstimmung finden kann. D.h. ich mache wohl irgendwas falsch.</p>
<p>Ich versuchs nochmal Konkret : Ich muss einen Template Parameter entsprechend erzeugen können ohne, dass er als Übergabeparamter in einer Funktion steht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908154</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908154</guid><dc:creator><![CDATA[Olli85]]></dc:creator><pubDate>Mon, 07 Jun 2010 08:09:10 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 08:12:00 GMT]]></title><description><![CDATA[<p>dein beispiel nr. 2 funktioniert eigentlich völlig problemlos bei mir - da hast du beim reduzieren des problems wohl die fehlerquelle wegreduziert.</p>
<p>ru,<br />
cirion</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908159</guid><dc:creator><![CDATA[cirion]]></dc:creator><pubDate>Mon, 07 Jun 2010 08:12:00 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 08:15:18 GMT]]></title><description><![CDATA[<p>Doch, das ist richtig! Dein Beispiel läuft, zumindest nachdem man int main() und so ergänzt hat.</p>
<p>Bring bitte mal ein vollständiges Minimalbeispiel, welches den Fehler zeigt, aber ansonsten compilierbar ist. Und die <strong>genaue</strong> Fehlermeldung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908160</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 07 Jun 2010 08:15:18 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 08:15:52 GMT]]></title><description><![CDATA[<ul>
<li>Benutze bitte [cpp]-Tags (erste weisse Schaltfläche).</li>
<li>Schreibe ein <strong>komplettes</strong> Minimalbeispiel ohne Kompilierfehler, die nichts mit dem Problem zu tun haben, hin.</li>
<li>Poste die exakte Fehlermeldung des Compilers.</li>
</ul>
<p>Nur so können wir sicher sein, dass die Vereinfachung nicht das Problem ist, und können auf Spekulationen verzichten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908161</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 07 Jun 2010 08:15:52 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 08:24:04 GMT]]></title><description><![CDATA[<p>Roger!</p>
<p>Hab das Problem gelöst. Ihr habt recht. Ich habs weg-minimalisiert.</p>
<p>Vielen Dank trotzdem und bis zur nächsten Frage.</p>
<p>Beste Grüße,<br />
Oliver</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908168</guid><dc:creator><![CDATA[Olli85]]></dc:creator><pubDate>Mon, 07 Jun 2010 08:24:04 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 09:23:15 GMT]]></title><description><![CDATA[<p>Wenn du bool vewenden möchtest, dann muss der erste Typ ein typename<br />
sein und keine class</p>
<pre><code class="language-cpp">template &lt;typename T1 , class T2&gt; 
void dieFunktion(T1 wert) 
{ 
T2 a = new T2(wert); 
}
</code></pre>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908194</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 07 Jun 2010 09:23:15 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 09:31:35 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Das ist nicht korrekt wenn ich mich richtig erinnere.<br />
class und typename sind in diesem Kontext gleichwertig und austauschbar.</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908202</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908202</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Mon, 07 Jun 2010 09:31:35 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 09:34:16 GMT]]></title><description><![CDATA[<p>Oh...</p>
<p>Nehm alles zurück...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908203</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 07 Jun 2010 09:34:16 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 09:40:46 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>CSpille schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Das ist nicht korrekt wenn ich mich richtig erinnere.<br />
class und typename sind in diesem Kontext gleichwertig und austauschbar.</p>
<p>Simon</p>
</blockquote>
<p>Ehrlich gesagt bin ich jetzt etwas verwirrt...<br />
Unter welcher Bedingung sind sie denn austauschbar?</p>
<p>Bisher habe ich für einfache Datentypen immer typename genommen.<br />
Kann das evtl. sogar einen Nachteil haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908207</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 07 Jun 2010 09:40:46 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 09:46:59 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>theta schrieb:</p>
<blockquote>
<p>CSpille schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Das ist nicht korrekt wenn ich mich richtig erinnere.<br />
class und typename sind in diesem Kontext gleichwertig und austauschbar.</p>
<p>Simon</p>
</blockquote>
<p>Ehrlich gesagt bin ich jetzt etwas verwirrt...<br />
Unter welcher Bedingung sind sie denn austauschbar?</p>
<p>Bisher habe ich für einfache Datentypen immer typename genommen.<br />
Kann das evtl. sogar einen Nachteil haben?</p>
</blockquote>
<p>nein, in dem kontext ist es vollkommen egal.<br />
der einzige unterschied, den es gibt ist hier ganz gut beschrieben:<br />
<a href="http://www.informit.com/articles/article.aspx?p=376878" rel="nofollow">http://www.informit.com/articles/article.aspx?p=376878</a></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908210</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 07 Jun 2010 09:46:59 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 11:59:31 GMT]]></title><description><![CDATA[<p>Olli85 schrieb:</p>
<blockquote>
<p>Es besteht folgende (minimierte) Problematik:<br />
---------------------------------------------------------------------------<br />
Die Template-Funktion:<br />
...<br />
template &lt;class T1 , class T2&gt;<br />
void dieFunktion(T1 wert)<br />
{<br />
T2 a = new T2(wert);<br />
}</p>
<p>Der ausführende Code (z.B. mit bool)<br />
...<br />
dieFunktion&lt; bool , KlasseX &gt; ( true );</p>
<p>(Läuft nicht)<br />
---------------------------------------------------------------------------<br />
Normalerweise kann man sich die spitzen Klammern ja sparen, wenn durch die Parameter der Funktion klar ist, um welche Typen es sich handelt.</p>
<p>Die Fragestellung ist also: Wie ist bitte der Syntax um Template Platzhalter zu verwenden, die nicht durch einen Parameter der Funktion definiert werden?</p>
</blockquote>
<p>Ich verstehe die Frage nicht ganz. Ich vermute, du willst das &quot;bool&quot; nicht mitangeben, da der Compiler sich das selbst über den Parameter true herleiten soll. Dann sortierst Du einfach die Template-Parameter um:</p>
<pre><code class="language-cpp">template &lt;class T2, class T1&gt;  // &lt;--- geändert
void dieFunktion(T1 wert)
{
    T2 * a = new T2(wert);
    // ^ 
    // new liefert einen Zeiger
}

...
dieFunktion&lt;KlasseX&gt; ( true );  // &lt;--- geändert
</code></pre>
<p>Gruß,<br />
kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908292</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 07 Jun 2010 11:59:31 GMT</pubDate></item><item><title><![CDATA[Reply to Template Funktion - Defintion der Typen, ohne dass sie in den Parametern auftauchen on Mon, 07 Jun 2010 16:23:53 GMT]]></title><description><![CDATA[<p>Du kannst ein eigenes Type Promotion basteln, was den Rückgabetyp aus dem Eingabetyp herleitet:</p>
<pre><code class="language-cpp">// Default Template liefert Rückgabetyp T für den Eingabetyp Typ T zurück
template&lt;typename T&gt;
struct TypePromotion
{
   typedef T value_type;
};

// spezialisiertes Template liefert Rückgabetyp double für den Eingabetyp float zurück
template&lt;&gt;
struct TypePromotion&lt;float&gt;
{
   typedef double value_type;
};

template&lt;typename T&gt;
typename TypePromotion&lt;T&gt;::value_type* function( T value )
{
   return new typename TypePromotion&lt;T&gt;::value_type( value );
}

int main()
{
   // Spezialisierung benutzen: float -&gt; double
   double* x = function( 1.0f );

   // Default Template benuzten: int -&gt; int
   int*  y = function( 1 );

   // Compiler Fehler: keine Typ Promotion von double nach int möglich
   int*  z = function( 1.0 );
}
</code></pre>
<p>Ob das den Aufwand wert ist weiß ich nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908438</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 07 Jun 2010 16:23:53 GMT</pubDate></item></channel></rss>