<?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[2 Fragen über Funkion Templates]]></title><description><![CDATA[<pre><code>#include &lt;iostream&gt;
using namespace std;

template &lt;typename T&gt;   //ist T frei wählbar? Wenn ja kann da auch z.B. &quot;Tem&quot; stehen, oder nur ein Buchstabe
void max(T&amp; test){      //muss T vor jedem stehen oder kann dort auch int stehen?
    test += 5;
}

int main(){
    int test=9995;
    max(test);    
    cout &lt;&lt; test;
    return 0;
}
</code></pre>
<p>Fragen stehen im Kommentar.</p>
<p>Gruß <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/322784/2-fragen-über-funkion-templates</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 16:34:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/322784.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Jan 2014 19:06:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 2 Fragen über Funkion Templates on Mon, 06 Jan 2014 19:06:34 GMT]]></title><description><![CDATA[<pre><code>#include &lt;iostream&gt;
using namespace std;

template &lt;typename T&gt;   //ist T frei wählbar? Wenn ja kann da auch z.B. &quot;Tem&quot; stehen, oder nur ein Buchstabe
void max(T&amp; test){      //muss T vor jedem stehen oder kann dort auch int stehen?
    test += 5;
}

int main(){
    int test=9995;
    max(test);    
    cout &lt;&lt; test;
    return 0;
}
</code></pre>
<p>Fragen stehen im Kommentar.</p>
<p>Gruß <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2375652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375652</guid><dc:creator><![CDATA[Skeptar]]></dc:creator><pubDate>Mon, 06 Jan 2014 19:06:34 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Fragen über Funkion Templates on Mon, 06 Jan 2014 19:10:44 GMT]]></title><description><![CDATA[<p>1. ja der name der template-argumente ist frei wählbar.<br />
2. ja die parameter sind auch frei wählbar.</p>
<p>edit:<br />
folgendes ist korrekt (ob es sinn macht sowas zu schreiben ist eine andere frage):</p>
<pre><code>template&lt;typename Foo&gt;
void f(int Param)
{
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2375653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375653</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Mon, 06 Jan 2014 19:10:44 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Fragen über Funkion Templates on Mon, 06 Jan 2014 19:10:56 GMT]]></title><description><![CDATA[<p>Wenn da int stünde, dann könntest du der Funktion auch nur int-Parameter übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375654</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Mon, 06 Jan 2014 19:10:56 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Fragen über Funkion Templates on Mon, 06 Jan 2014 19:23:25 GMT]]></title><description><![CDATA[<p>Und bei z.b. t lege ich den Typ nicht genau fest?<br />
Sondern es wird einfach der alte übernommen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375656</guid><dc:creator><![CDATA[Skeptar]]></dc:creator><pubDate>Mon, 06 Jan 2014 19:23:25 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Fragen über Funkion Templates on Mon, 06 Jan 2014 19:29:12 GMT]]></title><description><![CDATA[<p>Wenn du ein Funktionstemplate verwendest, willst du ja, dass die Funktion mit mehreren/allen Typen aufgerufen werden kann. Der Compiler erstellt dann praktisch für jeden Typ, mit dem die Funktion aufgerufen wird, eine eigene Funktion, bei der dann der Template-Typ T (oder wie du ihn auch immer nennst) durch den konkreten Typ ersetzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375657</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Mon, 06 Jan 2014 19:29:12 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Fragen über Funkion Templates on Mon, 06 Jan 2014 21:29:09 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/30792">@Skeptar</a><br />
Wenn du</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
</code></pre>
<p>schreibst, dann leitest du damit die Definition eines Templates (=&gt; Vorlage) für etwas ein. In deinem Fall ein Template für Funktionen.</p>
<p>Und zwar ein Template das in deinem Fall einen Parameter hat, und zwar einen &quot;Typ-Parameter&quot;.<br />
Du kannst dann diese Vorlage verwenden um Funktionen zu definieren.<br />
Dazu müssen alle Template-Parameter festgelegt werden.</p>
<p>In deinem Beispiel ( <code>max(test)</code> , wobei <code>test</code> ein <code>int</code> ist), sucht der Compiler den passenden Typ für <code>T</code> aus, nämlich <code>int</code> . Beim Erzeuden der Funktions-Definition ersetzt der Compiler dann alle <code>T</code> mit <code>int</code> .<br />
Deine Funktion wird also zu:</p>
<pre><code class="language-cpp">void max(int&amp; test){
    test += 5;
}
</code></pre>
<p>Natürlich kannst du die Template Parameter auch mehrfach verwenden, z.B.</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
void print(T a, T b){
    std::cout &lt;&lt; a &lt;&lt; &quot;, &quot; &lt;&lt; b &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>Dabei steht T allerdings immer für den selben Typ.<br />
D.h. folgendes wird nicht funktionieren:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
void print(T a, T b){
    std::cout &lt;&lt; a &lt;&lt; &quot;, &quot; &lt;&lt; b &lt;&lt; &quot;\n&quot;;
}

int main() {
    int x = 4;
    int y = 2;
    float z = 1;
    print(x, y); // OK, T = int
    print(x, z); // Was soll T jetzt werden - int oder float? =&gt; Compiler-Fehler
}
</code></pre>
<p>Wenn du willst dass &quot;a&quot; und &quot;b&quot; unterschiedliche Typen haben können, und beide nicht festgelegt sind, dann muss dein Template auch zwei verschiedene Typ-Parameter haben:</p>
<pre><code class="language-cpp">template &lt;typename T, typename U&gt;
void print(T a, U b){
    std::cout &lt;&lt; a &lt;&lt; &quot;, &quot; &lt;&lt; b &lt;&lt; &quot;\n&quot;;
}

int main() {
    int x = 4;
    int y = 2;
    float z = 1;
    print(x, y); // OK, T = int, U = int
    print(x, z); // OK, T = int, U = float
}
</code></pre>
<p>Bzw. du kannst die zu verwendenden Template-Parameter auch explizit angeben. Dann geht auch die Variante mit nur einem Template-Parameter wieder:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
void print(T a, T b){
    std::cout &lt;&lt; a &lt;&lt; &quot;, &quot; &lt;&lt; b &lt;&lt; &quot;\n&quot;;
}

int main() {
    int x = 4;
    int y = 2;
    float z = 1;
    print(x, y); // OK, T = int
    print&lt;double&gt;(x, z); // OK, T = double
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2375675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375675</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 06 Jan 2014 21:29:09 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Fragen über Funkion Templates on Tue, 07 Jan 2014 05:24:12 GMT]]></title><description><![CDATA[<p>Wow danke für diese ausführliche Erklärung! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2375703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375703</guid><dc:creator><![CDATA[Skeptar]]></dc:creator><pubDate>Tue, 07 Jan 2014 05:24:12 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Fragen über Funkion Templates on Tue, 07 Jan 2014 16:54:59 GMT]]></title><description><![CDATA[<p>Ich bin jedzt bei dem Überpunkt<br />
&quot;Spezialisierung von Templates&quot;<br />
Und ich hänge mal wieder <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>Mein Code:<br />
Main.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;schablonen.t&quot;
#include &lt;conio.h&gt;

using std::cout;
using std::cin;

int main(){
    int a, b;
    cin &gt;&gt; a &gt;&gt; b;
    cout &lt;&lt; maxi(a,b);
    return 0;
}
</code></pre>
<p>schablonen.t</p>
<pre><code>#ifndef SCHABLONEN_T
#define SCHABLONEN_T

#include &lt;string&gt;
using std::string;

template&lt;&gt;
string maxi(int a, int b) {
    if(a&lt;b){
        return &quot;A ist groesser&quot;;
    }
    else if(a&lt;b){
        return &quot;B ist groesser&quot;;
    }
    else{
        return &quot;Beide sind gleichgroß&quot;;
    }
}

#endif
</code></pre>
<p>Fehlermeldung: &quot;maxi ist keine Templatefunktion&quot;<br />
&quot;maxi wurde nicht in diesem Gültigkeitsbereich definiert&quot;</p>
<p>Und direkt noch eine Frage: Im Buch steht eine Template Datei ist oder kann eine .t Datei sein. Was sollte ich nehmen? Eine normale .cpp oder doch .t?</p>
<p>Ich hoffe es guckt noch jemand in diesen Thread <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/2375857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375857</guid><dc:creator><![CDATA[Skeptar]]></dc:creator><pubDate>Tue, 07 Jan 2014 16:54:59 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Fragen über Funkion Templates on Tue, 07 Jan 2014 18:30:22 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375870</guid><dc:creator><![CDATA[blumenkübel]]></dc:creator><pubDate>Tue, 07 Jan 2014 18:30:22 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Fragen über Funkion Templates on Tue, 07 Jan 2014 18:34:07 GMT]]></title><description><![CDATA[<p>Skeptar schrieb:</p>
<blockquote>
<pre><code>template&lt;&gt;
string maxi(int a, int b) {
    if(a&lt;b){
        return &quot;A ist groesser&quot;;
    }
    else if(a&lt;b){
        return &quot;B ist groesser&quot;;
    }
    else{
        return &quot;Beide sind gleichgroß&quot;;
    }
}
</code></pre>
</blockquote>
<p>Das ist ja mal das beste Template aller Zeiten.<br />
Entweder du lässt das Template weg. Denn momentan ist deine Funktion keine Templatefunktion und der Compiler hat sein gutes Recht dir das anzukreiden!<br />
Oder du verwendest das Templat, wie es sich gehört:</p>
<pre><code>template&lt;typename T&gt;
string maxi(T a, T b) {
// ...
}
</code></pre>
<p>Skeptar schrieb:</p>
<blockquote>
<p>Und direkt noch eine Frage: Im Buch steht eine Template Datei ist oder kann eine .t Datei sein. Was sollte ich nehmen? Eine normale .cpp oder doch .t?</p>
</blockquote>
<p>Die einzigen zwei Endungen, die man &quot;eigentlich&quot; verwendet, sind .h (für Header) und .cpp (für Quelldateien). Wobei dem Compiler ist es eigentlich ziemlich egal, welche Datei welche Endung. Man verwendet diese 2 Endungen aus Prinzip.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375871</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Tue, 07 Jan 2014 18:34:07 GMT</pubDate></item><item><title><![CDATA[Reply to 2 Fragen über Funkion Templates on Tue, 07 Jan 2014 21:49:15 GMT]]></title><description><![CDATA[<p>Es muss <code>if(b&lt;a)</code> heissen wenn die Funktion nicht lügen soll.</p>
<p>Und natürlich kannst du ein Template erst spezialisieren, nachdem du es definiert bzw. deklariert hast.</p>
<p>Also z.B.</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
string maxi(T, T); // Wir müsen hier keine Implementierung angeben,
                   // aber bekanntmachen dass es das Template überhaupt gibt müssen wir schon.

// Und JETZT können wir das Template spezialisieren

template&lt;&gt;
string maxi(int a, int b) {
    if(b&lt;a){
        return &quot;A ist groesser&quot;;
    }
    else if(a&lt;b){
        return &quot;B ist groesser&quot;;
    }
    else{
        return &quot;Beide sind gleichgroß&quot;;
    }
}
</code></pre>
<p>Und ich würde .h, .hpp oder .inl empfehlen. Das wären die &quot;üblichen&quot; Extensions.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2375923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2375923</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 07 Jan 2014 21:49:15 GMT</pubDate></item></channel></rss>